在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法

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,操作成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值