I have written a DLL in dev C++. The DLL's name is "DllMain.dll" and it contains two functions: HelloWorld
and ShowMe
. The header file looks like this:
DLLIMPORT void HelloWorld(); DLLIMPORT void ShowMe();
And the source file looks like this:
DLLIMPORT void HelloWorld () { MessageBox (0, "Hello World from DLL!\n", "Hi",MB_ICONINFORMATION); } DLLIMPORT void ShowMe() { MessageBox (0, "How are u?", "Hi", MB_ICONINFORMATION); }
I compile the code into a DLL and call the two functions from C#. The C# code looks like this:
[DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void HelloWorld(); [DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void ShowMe();
When I call the function "HelloWorld" it runs well and pops up a messageBox, but when I call the function ShowMe
an EntryPointNotFoundException
occurs. How do I avoid this exception? Do I need to add extern "C"
in the header file?
Yes, it will work. Just make sure you reference the library in your c++ library and link them together.
On Windows you do not link with a . dll file directly – you must use the accompanying . lib file instead. To do that go to Project -> Properties -> Configuration Properties -> Linker -> Additional Dependencies and add path to your .
The following code in VS 2012 worked fine:
#include <Windows.h> extern "C" { __declspec(dllexport) void HelloWorld () { MessageBox (0, L"Hello World from DLL!\n", L"Hi",MB_ICONINFORMATION); } __declspec(dllexport) void ShowMe() { MessageBox (0, L"How are u?", L"Hi", MB_ICONINFORMATION); } }
NOTE: If I remove the extern "C"
I get exception.
using System; using System.Runtime.InteropServices; namespace MyNameSpace { public class MyClass { [DllImport("DllMain.dll", EntryPoint = "HelloWorld")] public static extern void HelloWorld(); [DllImport("DllMain.dll", EntryPoint = "ShowMe")] public static extern void ShowMe(); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With