Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Photos | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » Articles » Creating C# Class Library (DLL) Using Visual Studio .NET

Creating C# Class Library (DLL) Using Visual Studio .NET

This tutorial explains how to create a C# class library(dll) and call it from a C# console client application.

Author Rank:
Total page views :  439505
Total downloads :  1465
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
mcMathProject.zip
 
Become a Sponsor

Creating a DLL using Visual C# is piece of cake. Believe me its much easier than VC++. I have divided this tutorial in two parts. 1. Building a Class Library, and 2. Building a client application to test the DLL.

Part 1: Creating a Class Library (DLL)

Create an Empty Class Library Project

Select File->New->Project->Visual C# Projects->Class Library. Select your project name and appropriate directory using Browse button and click OK. See Figure 1.

Figure 1.

Project and Its files

The Solution Explorer adds two C# classes to your project. First is AssemblyInfo.cs and second is Class1.cs.  We don't care about AssemblyInfo. We will be concentrating on Class1.cs. See Figure 2.

Figure 2.

The mcMath Namespace

When you double click on Class1.cs, you see a namespace mcMath. We will be referencing this namespace in our clients to access this class library.

using System;

namespace
mcMath
{

///
<summary>

///
Summary description for Class1.
/// </summary>

public class
Class1
{

public
Class1()
{
//
// TODO: Add constructor logic here
//
}
}
}

Now build this project to make sure every thing is going OK. After building this project, you will see mcMath.dll in your project's bin/debug directory. 

Adding Methods 

Open ClassView from your View menu. Right now it displays only Class1 with no methods and properties. Lets add one method and one property. See Figure 3.

Figure 3.

Right click on Class1->Add->Add Method...  See Figure 4.

Figure 4.

C# Method Wizard pops up. Add your method name, access type, return type, parameters, and even comments.  Use Add and Remove buttons to add and remove parameters from the parameter list respectively. I add one test method called mcTestMethod with no parameters. See Figure 5.

Figure 5.

I am adding one more method long Add( long val1, long val2 ). This method adds two numbers and returns the sum. Click Finish button when you're done. See Figure 6.

Figure 6.

The above action adds two method to the class and methods look like following listing:

/// <summary>
/// //This is a test method
/// </summary>
public void mcTestMethod()
{  
}

public long
Add(long val1, long val2)
{  
}

Adding Properties

Open C# Property Wizard in same manner as you did in the case of method and add a property to your class. See Figure 7.

Figure 7.

This action launches C# Property Wizard. Here you can type your property name, type and access. You also have options to choose from get only, set only or get and set both. You can even select if a property is static or virtual. I add a property Extra with public access and bool type and get/set option set. See Figure 8.

Figure 8.

After adding a method and a property, our class looks like Figure 9 in Class View after expanding the class node.

Figure 9.

If you look your Class1 class carefully, Wizards have added two functions to your class. 

/// <summary>
/// //This is a test property
/// </summary>
public bool Extra
{
get
{
return true;
}
set
{
}
}

Adding Code to the Class 

Add this code ( bold ) to the methods and property now. And now I want to change my Class1 to mcMathComp because Class1 is quite confusing and it will create problem when you will use this class in a client application. Make sure you change class name and its constructor both.

Note: I'm not adding any code to mcTestMethod, You can add any thing if you want.

using System;

namespace
mcMath
{

///
<summary>

///
Summary description for Class1.
/// </summary>

public class
mcMathComp
{
private bool bTest = false
;

public mcMathComp()
{
// TODO: Add constructor logic here
}

///
<summary>

///
//This is a test method
/// </summary>

public void
mcTestMethod()
{ }

public long Add(long val1, long val2)
{
return
val1 + val2;
}

/// <summary>
///
//This is a test property
/// </summary>

public bool
Extra
{
get

{
return
bTest;
}
set

{
bTest = Extra ;
}
}
}
}

Build the DLL

Now build the DLL and see bin\debug directory of your project. You will see your DLL. Piece of cake? Huh? :). 

Part 2: Building a Client Application

Calling methods and properties of a DLL from a C# client is also an easy task. Just follow these few simple steps and see how easy is to create and use a DLL in C#.

Create a Console Application 

Select File->New->Project->Visual C# Projects->Console Application. I will test my DLL from this console application. See Figure 10.

Figure 10.

Add Reference of the Namespace

Now next step is to add reference to the library. You can use Add Reference menu option to add a reference. Go to Project->Add reference. See Figure 11.

Figure 11.

Now on this page, click Browse button to browse your library. See Figure 12.

Figure 12.

Browse for your DLL, which we created in part 1 of this tutorial and click Ok. See Figure 13.

Figure 13.

Add Reference Wizard will add reference of your library to the current project. See Figure 14.

Figure 14.

After adding reference to mcMath library, you can see it as an available namespace references. See Figure 15.

Figure 15.

Call mcMath Namespace, Create Object of mcMathComp and call its methods and properties.

You are only one step away to call methods and properties of your component. You follow these steps:

1. Use namespace

Add using mcMath in the beginning for your project.

using mcMath;

2. Create an Object of mcMathComp

mcMathComp cls = new mcMathComp();

3. Call Methods and Properties

Now you can call the mcMathComp class method and properties as you can see I call Add method and return result in lRes and print out result on the console.

mcMathComp cls = new mcMathComp();
long lRes = cls.Add( 23, 40 );
cls.Extra = false;
Console.WriteLine(lRes.ToString());

Now you can print out the result.

The entire project is listed in the following Listing:

using System;
using mcMath;

        namespace
mcClient
{
/// <summary>
/// Summary description for Class1.
/// </summary>

        class
Class1
{

        ///
<summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
mcMathComp cls = new mcMathComp();
long lRes = cls.Add( 23, 40 );
cls.Extra = false;
Console.WriteLine(lRes.ToString());
}
}
}

Now build and run the project. The output looks like Figure 16.

Figure 16.


Login to add your contents and source code to this article
 About the author
 
Mahesh Chand
Mahesh is a software developer with over 13 years of experience building systems for Financial and Banking, Engineering & Architectural, Imaging, Construction, Biological & Pharmaceuticals, Healthcare and Education industries. His expertise is Windows Forms, ASP.NET, Silverlight, WPF, WCF, Visual Studio 2010, SQL Server, and Oracle. If you are looking for a Windows Forms, ASP.NET, WPF, Silverlight, C#, VB.NET, Oracle, and SQL Server Consultant in Philadelphia area or remote location, drop me a line at MAHESH [AT] C-SHARPCORNER [DOT] COM.
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010 Professional
Microsoft Visual Studio 2010 Professional will launch on April 12, but you can beat the rush and secure your copy today by pre-ordering at the affordable estimated retail price of $549 (US). Pre-order now.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Developer-Ready ASP.NET 2.0 Web Hosting with 3 MONTHS FREE
Now supporting .NET 3.0 Framework with Windows Workflow Foundation, Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), windows CardSpace (WCS)! Providing more flexibility for Developers with Web Services Support and a User/Permission Manger. Also supporting MS SQL 2005/2000 with Real-Time Backups, FREE Automated Attach .MDF Tool, FREE SQL Restore and Shrink SQL DB Tools, and SQL
 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
mcMathProject.zip
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
Become a Sponsor
 Comments
loading dll at runtime by Muslim On January 29, 2007
if i have to call McMath dll at run time then how can achieve this.
Reply | Email | Delete | Modify | 
Re: loading dll at runtime by Mahesh On January 29, 2007
You can use Assembly class found in System.Reflection. It has a Load method that loads a DLL at runtime.
Reply | Email | Delete | Modify | 
Signing class dll with assembly by walter On February 1, 2007
How would you add the assembly inforation to a class like this. i have a simple class I am trying to use with Report Services. I have created a key pair, copied dll to correct directories and modified confi files. When I try to add the reference I am told it does not contain assembly information. Thanks
Reply | Email | Delete | Modify | 
loading dll for use with vba by Michael On February 11, 2007
how can i use this sample dll (mcMath.dll) with vba?
Reply | Email | Delete | Modify | 
Re: loading dll for use with vba by Gerald On March 28, 2007

Hi Mike,

Did you manage to create a C# DLL and use it in VBA ?

Regards

Gerald.

Reply | Email | Delete | Modify | 
validating the text box by nazi On March 30, 2007
How can I call a method and it's parameters from a library within a form for using that method and it's parameters to validate a text box
Reply | Email | Delete | Modify | 
Re: validating the text box by Mahesh On April 5, 2007

You mean validating a TextBox's value?

You add a new method called ValidateTextBox to the library with value as the parameter or whatever else you want, put validation code in the method, and call it from your form.

Reply | Email | Delete | Modify | 
Make DLL From Cs file by ali On May 22, 2007
How can i Make DLL From Cs file?
Reply | Email | Delete | Modify | 
Re: Make DLL From Cs file by Mahesh On May 22, 2007

You need to either create a new Project (DLL) type using Visual Studio and put your cs code in there. If you do not have Visual Studio, Download free version of Visual Studio 2005 Express from MSDN site.

Another way is to compile your cs file to a DLL using command line C# compiler csc.

Here are the syntaxes for csc.

  • Compiles File.cs producing File.exe:

    csc File.cs 
  • Compiles File.cs producing File.dll:

    csc /target:library File.cs
  • Compiles File.cs and creates My.exe:

    csc /out:My.exe File.cs
  • Compiles all of the C# files in the current directory, with optimizations on and defines the DEBUG symbol. The output is File2.exe:

    csc /define:DEBUG /optimize /out:File2.exe *.cs
  • Compiles all of the C# files in the current directory producing a debug version of File2.dll. No logo and no warnings are displayed:

    csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs
  • Compiles all of the C# files in the current directory to Something.xyz (a DLL):

    csc /target:library /out:Something.xyz *.cs
Reply | Email | Delete | Modify | 
register DLL by Peter On May 23, 2007

Hello mahesh, I have created a dll with the help of your example code. My code is as following:

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

namespace DRLAW

{

 public class FolderDialog

{ public void OpenFolder()

{

FolderBrowserDialog FBDlog = new FolderBrowserDialog(); FBDlog.Description = "Selecteer de Benodigde map:"; FBDlog.ShowNewFolderButton = true;

if (FBDlog.ShowDialog() == DialogResult.OK) { MessageBox.Show(FBDlog.SelectedPath, "Test", MessageBoxButtons.OK); } } } }

but i cant register it with regsvr32'in windows Could you tell me what i am doing wrong ? Thanks for the help in advance Kind regards Peter

Reply | Email | Delete | Modify | 
Re: register DLL by Mahesh On May 24, 2007

Peter,
Why do you need to register a .NET DLL? Those days are gone. To use this DLL in any project, simply add reference to the DLL. If this DLL will be shared by many applications, you can still use Add Reference.

Alternatively, you can deploy it to GAC. See Assemblies section for that but GAC is for when you need to share same DLL among multiple applications without deploying it with all applications.

Reply | Email | Delete | Modify | 
Re: register DLL by Cesar On June 5, 2007

Hi...

You have to you create a CCW for your C# dll. Make this by using regasm.exe, or export the TLB (Type Library) by running tlbexp.exe. Both programs can be found at the .NET command prompt.

Bye

Reply | Email | Delete | Modify | 
how to use cs dll in visual basic 6 by carlos On June 25, 2007
If you can tell me how to use a cs dll in visual basic 6 or were I can find information about it. Thanks.
Reply | Email | Delete | Modify | 
Re: how to use cs dll in visual basic 6 by Mahesh On June 26, 2007

Read some info on COM Interop. Here is an article on how to call a .NET library from a non .NET application:
http://www.c-sharpcorner.com/UploadFile/ajaiman/COMInteropP211092005011850AM/COMInteropP2.aspx

Here are some more articles from the same author:

http://www.c-sharpcorner.com/Authors/AuthorDetails.aspx?AuthorID=ajaiman

 

Reply | Email | Delete | Modify | 
share dll (shared memory) by Luanne On August 15, 2007
Is it possible to use one dll on two applications running at the same time? Using dll let's say App1's output will be the input of App2. If yes, would you be kind to show me some examples. Thank you.
Reply | Email | Delete | Modify | 
share dll (shared memory) by Luanne On August 15, 2007
Is it possible to use one dll on two applications running at the same time? Using dll let's say App1's output will be the input of App2. If yes, would you be kind to show me some examples. Thank you.
Reply | Email | Delete | Modify | 
Re: share dll (shared memory) by Mahesh On August 23, 2007

Yes you can share a single DLL among multiple application simultaneously but each application will have it's own instance of the DLL.

If you want to share application 1's output as application 2's input, look into .NET remoting. Application 1 will call Application 2 to get the output and pass it to the DLL to do the processing.

Reply | Email | Delete | Modify | 
can i apply these method in Web Application by Amila On August 21, 2007
Dear Mahesh Its a very simple and nice article. Can i add dll for a web site project. Thanks Amila
Reply | Email | Delete | Modify | 
Re: can i apply these method in Web Application by Mahesh On August 23, 2007
Yes you can add a DLL reference to a Web application using Add Reference menu option on the right click of the Web project in Visual Studio.
Reply | Email | Delete | Modify | 
The type or namespace name 'myDLL' could not be found (are you missing a using directive or an assembly reference?) by T On August 24, 2007
Hi Mahesh, I created a dll and referred to it just like you said in your article. However, I get the error : The type or namespace name 'myDLL' could not be found (are you missing a using directive or an assembly reference?) I found an article saying I should use the "Project" tab in "Add Reference" to add my dll. I did and it's still not working. My DLL and Console apps are in the same Solution. Would you please give me a suggestion as how to fix the problem? Thanks, TA
Reply | Email | Delete | Modify | 
The type or namespace name 'myDLL' could not be found (are you missing a using directive or an assembly reference?) by T On August 24, 2007
Hi Mahesh, I created a dll and referred to it just like you said in your article. However, I get the error : The type or namespace name 'myDLL' could not be found (are you missing a using directive or an assembly reference?) I found an article saying I should use the "Project" tab in "Add Reference" to add my dll. I did and it's still not working. My DLL and Console apps are in the same Solution. Would you please give me a suggestion as how to fix the problem? Thanks, TA
Reply | Email | Delete | Modify | 
Re: The type or namespace name 'myDLL' could not be found (are you missing a using directive or an assembly reference?) by Mahesh On August 27, 2007
Is the name of "namespace" in which your DLL class is defined is "myDLL"? You can make sure by expandind the References node in Solution Explorer. See Figure 15. Whatever is the name in that reference, you use use that in your code.
Reply | Email | Delete | Modify | 
fgty by prasad On August 30, 2007
gfthy
Reply | Email | Delete | Modify | 
dll by prasad On August 30, 2007
add reference
Reply | Email | Delete | Modify | 
Thank you very much by Fred On October 5, 2007
Mahesh, Just today I was wondering how to do this (new to C#) and shazaam here you are. Very clear and concise in such a short demonstration. Ususally something is lost in some of the shorter tutorials but I was able to implement this right after the tutorial. I see that you are an author and was wondering what other pearls of wisdom you have written and where can they be found. Thanks again
Reply | Email | Delete | Modify | 
Re: Thank you very much by Mahesh On April 7, 2009
Thanks Fred.
Everything I have is right here on C# Corner.
Reply | Email | Delete | Modify | 
see content of dll by mahdieh On October 23, 2007
Hi, i want to see the implementation of a .dll file.implementation of methods. how can?
Reply | Email | Delete | Modify | 
Re: see content of dll by Mahesh On April 7, 2009
This tutorial will build a .DLL file
Reply | Email | Delete | Modify | 
"Add Method" is not displayed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! by Ahmed On November 5, 2007
how can i add a method in visual C# 2005? the menu that appears doesn't contains "Add > Method" button.
Reply | Email | Delete | Modify | 
Re: "Add Method" is not displayed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! by Mahesh On April 7, 2009
Hmm .. You need to open Class Viewer from Windows, find the class and right click on it. Then you will see Add method option.

I am not sure if Express and Standard versions of Visual Studio 2005 provides this functionality.
Reply | Email | Delete | Modify | 
using a dll from another application by pejman On November 13, 2007
hi i have one classlibrary and i want to use it in an application i whant to access my fnctions with progid but i am facing this error:unable to get clsid from progid
Reply | Email | Delete | Modify | 
Add method is not visible in c#2005 by Kunal On December 7, 2007
How can i view it
Reply | Email | Delete | Modify | 
Re: Add method is not visible in c#2005 by Mahesh On April 7, 2009
Hmm .. You need to open Class Viewer from Windows, find the class and right click on it. Then you will see Add method option.

I am not sure if Express and Standard versions of Visual Studio 2005 provides this functionality.
Reply | Email | Delete | Modify | 
I have a problem please help!! by mohamed On December 15, 2007
I already have a dll file that i want to add in my C# project but when am adding a refernce it gives me this error "a reference to"my dll" could not be added .please make sure that the file is accessible,and that it is a valid assembly or a COM component." ? please infor me what to do thank you
Reply | Email | Delete | Modify | 
Re: I have a problem please help!! by Mahesh On April 7, 2009
YES. A DLL must be build using COM or .NET. If its an older DLL implemented using C++, it will not work. It's just not supported using Add Reference.

For that, you will need to import library. Search this site for "import C++ library in .NET"
Reply | Email | Delete | Modify | 
structuring dll's in directories by dan On December 15, 2007
When i build mcClient, how can i make it possible so that it builds the mcMath.dll into a folder say 'plugins' i.e in my bin\Debug\ i will have mcClient.exe and it build and call mcMath.dll from bin\Debug\plugin
Reply | Email | Delete | Modify | 
Re: structuring dll's in directories by Mahesh On April 7, 2009
In your project, there is an option where you want to copy the output file. Right click on project, select Properties and you should see an ouput folder option somwhere.
Reply | Email | Delete | Modify | 
structuring dll's in directories by dan On December 15, 2007
When i build mcClient, how can i make it possible so that it builds the mcMath.dll into a folder say 'plugins' i.e in my bin\Debug\ i will have mcClient.exe and it build and call mcMath.dll from bin\Debug\plugin
Reply | Email | Delete | Modify | 
arguments in dll metod by Natarajan On January 8, 2008
hi magesh how to pass dropdown object as argument in dll method in c# .net please help me.............
Reply | Email | Delete | Modify | 
arguments in dll metod by Natarajan On January 8, 2008
hi magesh how to pass dropdown object as argument in dll method in c# .net please help me.............
Reply | Email | Delete | Modify | 
Re: arguments in dll metod by Mahesh On April 7, 2009

Where is this object/class defined? This class has to be a part of the DLL to use it within the DLL or you need to add reference to the library where this class is defined. Once referenced, you can create a method like this.

public int MyMethod(MyObject oj)
{
// Do something here
}

If you just want to pass value from the drop down, that will just be a string value. You need to convert DropDownList.SeletectedItem.Text or something like this.

Reply | Email | Delete | Modify | 
how does the Assembly show its own tooltips by han On January 23, 2008
hi : how does the Assembly show its property's or method's tooltips just as system's assembly, when i use it in another project?
Reply | Email | Delete | Modify | 
Re: how does the Assembly show its own tooltips by Mahesh On April 7, 2009

You will probably have to add attributes to the assembly. I will search for attributes in assemblies. I have not done this myself. Also, you may want to post your question on the forums.

I would like to know how you did it.

Good luck!

Reply | Email | Delete | Modify | 
All this worry about getting my project done... by Nancy On October 30, 2008
And your article saved my fiscal week! Thank you, thank you, n143juju
Reply | Email | Delete | Modify | 
Re: All this worry about getting my project done... by Mahesh On May 2, 2009
I am glad it saved you a week ;).

Tell your manager, it will take you 2 weeks do to the work :) and one week, enjoy and other week, help others, call friends, get out of house and play with kids.


Reply | Email | Delete | Modify | 
Another helpful article from c-sharpcorner! by Alan C On April 30, 2009
C-sharpcorner regularly has helpful examples of basic C# techniques, without a lot of complexity. Thanks Mahesh!
Reply | Email | Delete | Modify | 
Good Articles by sameer On September 5, 2009

Weel Article Which solved my problem

Reply | Email | Delete | Modify | 
DLL reference and future edits. by Venkat On December 22, 2009
I have Added a reference to this DLL from a project and deployed(copied exe to network frive) the exe I created from that project. Now if I change anything in the DLL, the exe is not picking up latest changes. What is the proper way of doing it.

Thanks,
Kaashi.
Reply | Email | Delete | Modify | 
Thank you by Arif On March 1, 2010

Very helpful article

Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 2010  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.