1. 首先,在Visual Studio中,我们建立一个Visual C++的项目
类型选择Win32 Project,继续选择Dll类型
该项目取名叫做myDll
1) 添加myDll.h头文件,代码如下:
#ifdef A_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
extern "C" DLL_API void HelloWorld();
这里HelloWorld()就是等下我们要暴露给C#调用的C方法。
注意:必须给函数增加extern "C"关键字,否则等下将无法找到该
函数的入口点。
2)添加myDll.cpp文件,代码如下:
#include "stdafx.h"
#include "myDll.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void HelloWorld()
{
MessageBox(NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
2. 编译成功!接下来我们便可以添加一个C#控制台项目了
C#测试代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace TestDll
{
class Program
{
[DllImport("myDll.dll")]
public extern static void HelloWorld();
static void Main(string[] args)
{
HelloWorld();
}
}
}
在这里我要特别指出的是两点:
1) 必须使用如下命名空间
using System.Runtime.InteropServices
2) 对于原Dll文件中C方法的wrapper
[DllImport("myDll.dll")]
public extern static void HelloWorld();
运行程序,会看到弹出Hello World对话框!