C++ 调用dll

今天试验了一下C++利用windows api调用dll。dll代码是用delphi编译出来的,调用的代码是C++。

先看delphi写的dll

 

代码
 
   
unit Unit1;

interface

function Add(ANumOne, ANumTwo: Integer): Integer; stdcall ;

implementation

function Add(ANumOne, ANumTwo: Integer): Integer; stdcall ;
begin
Result :
= ANumOne + ANumTwo;
end ;

exports
Add;

end .

 

再看C++调用

 

代码
 
   
#include < iostream >
#include
< windows.h >


typedef
int ( * AddFunc)( int , int )__stdcall;

int main( int argc, char ** argv)
{
HINSTANCE handle;
handle
= LoadLibrary( " d:\Test.dll " );
AddFunc func
= (AddFunc)GetProcAddress(handle, " Add " );
std::cout
<< func( 3 , 4 ) << std::endl;
return 0 ;
}

 

 

其实编译好的二进制文件例如exe和dll在运用的时候都会映射到内存中去。因此只要在这段映射的内存中找到需要调用的函数的地址,

并且知道函数的调用形式就可以用函数指针加以调用。

在delphi代码中,我们可以看到Add函数带有两个参数,并且标明了是stdcall的调用形式,export标明了导出函数是Add

在C++代码中,我们用到了两个api函数

  • 第一个是LoadLibrary函数,它的作用是将dll映射到内存,并且返回句柄
  • 第二个函数是GetProcAddress,它的作用是返回函数指针,注意一定要利用先验知识进行正确的类型转换, 不然会调用失败。

转载于:https://www.cnblogs.com/lovelyxia/archive/2010/12/17/1909660.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值