您的位置:首页 > 编程语言 > C语言/C++

C#调用c++创建的dll

2012-05-26 15:16 246 查看
在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法,环境VS2005。

VS2005中很多工程都可以生成DLL,例如atl,mfc,win32等等。选择Win32,步骤如下:

1:新建项目TestDLL,选择win32中的win32控制台应用程序,在“应用程序设置”中,选择“应用程序类型”为DLL,并将下方的附加选项勾上“空项目”,就可以了。

2:添加一个C++类,这时vs2005会生成TestDLL.h和TestDLL.cpp的文件,在.h文件中,键入如下代码:

#define LIBEXPORT_API extern "C" __declspec(dllexport)

LIBEXPORT_API int f( char * ch);

//这是一个测试程序

3:然后在.cpp文件中,必须加入DllMain函数以作为程序出口,并实现函数f:

BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

{

//程序出口

return TRUE;

}

//函数的实现在这里 LIBEXPORT_API int f(char * ch)

{

return 88;

}

4:编译生成,就能得到与项目同名的TestDLL.dll。

注意,生成的dll文件在外面的一个debug文件中。

接下来该怎么调用dll,分别在C++和C#做了调用。调用过程如下:

C++调用:

1:首先将dll文件加入工程,拷贝dll置于c++项目文件所在的目录。

2:调用代码 typedef int (*TEST) (char * ch);

//定义调用DLL函数的类型

//下面是调用过程

HINSTANCE hDLL; TEST f; hDLL = LoadLibrary(_T("TestDLL.dll"));

//加载动态链接库TestDLL.dll文件;

f = (TEST)GetProcAddress(hDLL,(LPCSTR)"f");

//调用的f函数

int si ; si = f("abc");

FreeLibrary(hDLL);

//卸载TestDLL.dll文件;

cout<<si;

return 0;

3:结果——屏幕返回88,正确地调用了dll中的方法。

C#调用:

1:将dll文件拷贝至C#执行文件所在目录,一般在/bin/debug目录下;

2:调用代码

using System.Runtime.InteropServices;

...

...

class CallDLL

{

//使用一个类封装所有dll的函数

[DllImport("TestDLL.dll", EntryPoint = "f",

CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

//指定dll访问入口

public static extern int f(string s);

//定义调用dll中函数的类型

} ...

//使用dll中的函数

int m = CallDLL.f("mmm");

3:结果m的值正是88,操作成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: