我在开发C++中编写了一个DLL.DLL的名称是"DllMain.dll",它包含两个函数:HelloWorld和ShowMe.头文件如下所示:
DLLIMPORT void HelloWorld();
DLLIMPORT void ShowMe();
Run Code Online (Sandbox Code Playgroud)
源文件如下所示:
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi",MB_ICONINFORMATION);
}
DLLIMPORT void ShowMe()
{
MessageBox (0, "How are u?", "Hi", MB_ICONINFORMATION);
}
Run Code Online (Sandbox Code Playgroud)
我将代码编译成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();
Run Code Online (Sandbox Code Playgroud)
当我打电话功能的"HelloWorld",它运行良好,弹出一个消息框,但是当我调用该函数ShowMe的EntryPointNotFoundException发生.我该如何避免这种异常?我是否需要添加extern "C"头文件?
ato*_*erz 13
VS 2012中的以下代码运行良好:
#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);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果我删除extern "C"我得到的例外.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74601 次 |
| 最近记录: |