我用Dev C++编写了一个DLL,它的名字是“DllMain.dll”,包含两个函数:HelloWorld
和ShowMe
。头文件如下:
#ifdef DLLMAIN_EXPORTS #define DLLMAIN_API __declspec(dllexport) #else #define DLLMAIN_API __declspec(dllimport) #endif
DLLMAIN_API void HelloWorld(); DLLMAIN_API void ShowMe();
```
DLLIMPORT void HelloWorld();
DLLIMPORT void ShowMe();
而源文件看起来像这样:
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi",MB_ICONINFORMATION);
}
DLLIMPORT void ShowMe()
{
MessageBox (0, "How are u?", "Hi", MB_ICONINFORMATION);
}
我将代码编译为DLL并从C#中调用这两个函数。C#代码如下:
[DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void HelloWorld();
[DllImport("DllMain.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void ShowMe();
当我调用函数"HelloWorld"时,它可以正常运行并弹出一个消息框,但当我调用函数ShowMe
时,会发生EntryPointNotFoundException
异常。我该如何避免这个异常?是否需要在头文件中添加extern "C"
?
CallingConvention.StdCall
。 - Henrik