【发布时间】:2013-04-26 07:26:23
【问题描述】:
我用开发 C++ 编写了一个 DLL。 DLL 的名称是“DllMain.dll”,它包含两个函数:HelloWorld 和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"吗?
【问题讨论】:
-
你能发布你的 C++ 代码吗?
-
您可能应该将调用约定更改为
CallingConvention.StdCall。