我已经在dev C++中编写了一个DLL。该DLL的名称是“DllMain.dll”,它包含两个函数:HelloWorld
和ShowMe
。头文件看起来是这样的:如何在C中调用C++ DLL#
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"
吗?
请问您可以发布您的C++代码吗? – 2013-05-02 09:20:22
您应该将调用约定更改为“CallingConvention.StdCall”。 – Henrik 2013-05-02 10:57:11