Click here to Skip to main content
Click here to Skip to main content

How to create a DLL library in C and then use it with C#

By , 13 Mar 2005
 

Introduction

After spending some time trying to implement this simple task, I started to search similar code examples over the Internet. I was really very surprised when found that all examples were slightly different from what I needed. Finally, I realized that there is no (at least spending 30 min in the net) easy-to-use example, that’s why I decided to write this article.

Assuming that you already know what a DLL is, let's begin with creating a simple one.

  1. Start Visual Studio .NET.
  2. Go to File->New->Project.
  3. Select Visual C++ Project, and from the “Templates”, select “Win32 Project”.
  4. Give the name to your project. This will be the name of your final DLL (in my case: TestLib).
  5. Press OK.
  6. Select DLL from “Application Type” (“Application Settings” tab).
  7. Check “Empty Project” (we need to create our project from scratch, right?), and press Finish.

OK, now we should attach an empty source file to our blank project.

  1. Start Solution Explorer (if it’s not displayed).
  2. Right click to the “Source Files”, Add->Add New Item then select “C++ File” and give the name to it.
  3. Press “Open”.

In the opened window, enter the following code:

#include <stdio.h>

extern "C"
{
  __declspec(dllexport) void DisplayHelloFromDLL()
  {
    printf ("Hello from DLL !\n");
  }
}

Please note that __declspec(dllexport) is an obligatory prefix which makes DLL functions available from an external application.

extern “C” (with brackets) is also very important, it shows that all code within brackets is available from “outside”. Although code will compile even without this statement, during runtime, you’ll get a very unpleasant error. So, do not forget to include it.

Build this application and your DLL will be ready-to-use.

Now it’s time to create an application which will use our DLL, as the main title explains. We will create this type of application using Microsoft’s C#.

Creating a simple C# application:

  1. Start Visual Studio .NET.
  2. Go to File->New->Project.
  3. Select Visual C# Project. From the “Templates”, you can either select “Console Application”, or an “Empty Project” just like it was described above.
  4. Give the name to your application.
  5. Press OK.

Into the specified class, insert the following two lines:

[DllImport("TestLib.dll")]

public static extern void DisplayHelloFromDLL ();

In C#, keyword extern indicates that the method is implemented externally.

Your code should look something like this:

using System;
using System.Runtime.InteropServices;     // DLL support

class HelloWorld
{
    [DllImport("TestLib.dll")]
    public static extern void DisplayHelloFromDLL ();

    static void Main ()
    {
        Console.WriteLine ("This is C# program");
        DisplayHelloFromDLL ();
    }
}

Please, note that System.Runtime.InteropServices is required for operations with the DLL.

According to MSDN:

“The System.Runtime.InteropServices namespace provides a collection of classes useful for accessing COM objects, and native APIs from .NET”

OK, now build this application, and then copy the previously built DLL into the Debug/Release directory of the current application. The DLL should be in the same directory as your main application.

Now start an application. If everything you’ve made was correct, you should get something like this:

That’s all, really simple isn’t it?

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Vladimir Tskhvaradze
Other
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5 PinmemberJoe DF28 Apr '13 - 9:13 
QuestionGreat! PinmemberJoe DF24 Apr '13 - 19:02 
QuestionSimplest Method Pinmembersourabhdev141 Mar '13 - 8:40 
AnswerRe: Simplest Method [modified] PinmemberJibesh1 Mar '13 - 9:25 
GeneralMy vote of 5 Pinmemberraj23karthik19 Oct '12 - 19:35 
GeneralMy vote of 5 PinmemberMember 200288416 Oct '12 - 22:06 
Questionopencv c program run in c# Pinmembersampathbc1231 Aug '12 - 19:17 
GeneralMy vote of 5 PinmemberMenon Santosh27 Jul '12 - 3:09 
GeneralMy vote of 5 PinmemberAVardhan16 May '12 - 5:04 
GeneralMy vote of 5 Pinmember5cw24 Apr '12 - 19:15 
QuestionHoe to get return from parameter of VC++ function PinmemberRamveer Singh from Gurgaon, Haryana13 Apr '12 - 0:35 
GeneralMy vote of 4 PinmemberPradeep Kumar G M20 Mar '12 - 21:57 
QuestionWe need to create our project from scratch, right? PinmemberSam Hobbs8 Feb '12 - 13:29 
QuestionThanks PinmemberJayawant Karale29 Nov '11 - 19:11 
GeneralMy vote of 5 Pinmemberweifirst3 Aug '11 - 21:03 
Questioni want to call my function inside the dll and from my application PinmemberMember 77180056 Jul '11 - 18:48 
Questioni want to call my function inside the dll and from my application PinmemberMember 77180056 Jul '11 - 18:47 
GeneralMy vote of 5 Pinmembershynet22 Apr '11 - 10:24 
GeneralMy vote of 5 PinmemberMartin Hofmann19 Jan '11 - 4:33 
GeneralMy vote of 5 Pinmemberir17528 Oct '10 - 8:04 
GeneralMy vote of 5 PinmemberSomanth csad16 Aug '10 - 23:59 
Generalhi.. this dint work for me. [modified] Pinmemberaju89628 Jul '10 - 2:09 
GeneralThank you PinmemberOmar Gamil21 Jun '10 - 23:56 
GeneralGreat Job PinmemberAbdulkarim Zrik7 Jun '10 - 22:20 
Generalhi brother PinmemberGogu Ologu1 Jun '10 - 13:39 
GeneralMy vote of 2 Pinmemberfiras_hamzeh13 May '10 - 3:57 
GeneralRe: My vote of 2 PinmemberJeremy Jones32123 Jun '10 - 8:49 
GeneralRe: My vote of 2 Pinmemberfiras_hamzeh23 Jun '10 - 10:04 
Generalgreat article and thanks Pinmembermickyzhang12 Jan '10 - 6:30 
General"An attempt was made to load a program with an incorrect format" [modified] Pinmemberlonik.r21 Jul '09 - 22:50 
GeneralRe: "An attempt was made to load a program with an incorrect format" Pinmembergentry_joey13 Dec '09 - 8:29 
QuestionHow to use this .dll and .exe in a System, which having only .net frame work, (not Visual Studio) PinmemberMember 377636727 Nov '08 - 1:14 
QuestionDo you Think it is working ?? PinmemberMember 339892412 Oct '08 - 20:15 
AnswerRe: Do you Think it is working ?? PinmemberJonghoon Han19 Nov '08 - 5:34 
QuestionHow Do i Create a MyLib Pinmembervijaymunnoli12 Jun '08 - 0:09 
QuestionWhy doesn't this work with Visual Studio 2005 Pinmembercanhestros3 Apr '08 - 3:44 
GeneralRuntime exception while loading dll [modified] Pinmemberparazitu3 Nov '07 - 2:52 
GeneralReally helped me. Pinmemberramachandragowda2 Oct '07 - 5:31 
GeneralNice code Pinmemberbijulsoni16 Aug '07 - 13:23 
Questionwhat about using classes Pinmembersoorajvs200513 Aug '07 - 0:14 
QuestionDoes not work on other pc PinmemberRafan31 May '07 - 11:59 
AnswerRe: Does not work on other pc [modified] PinmemberMichael900028 Jun '08 - 13:18 
GeneralEmbedded Resource in .NET Pinmembertanveerakl3 Jul '06 - 23:48 
Generalreleasing resources Pinmemberfatih isikhan5 Dec '05 - 3:08 
QuestionUsing strings parameters in C++ DLL PinmemberBillMcNeil1 Dec '05 - 8:05 
Generalextern not necessary PinmemberMark Zudeck27 Oct '05 - 8:55 
GeneralNice article ! PinmemberGiorgi Moniava17 Oct '05 - 10:01 
Generalexport/import a class... Pinmemberd00_ape20 Jun '05 - 4:13 
QuestionCreate Dll library in C and then use it with C#, but can I create Dll Library in C# and then use it with C, VC/C++ ? PinsussLiTaiNien17 Jun '05 - 18:18 
GeneralMarshalling Pinmemberpjcrosbie8 Apr '05 - 17:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130523.1 | Last Updated 14 Mar 2005
Article Copyright 2005 by Vladimir Tskhvaradze
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid