VC中DLL的调用

HINSTANCE       dllinstance;

 

dllinstance=::LoadLibrary(strDllUrl);

 

if(dllinstance==NULL) AfxMessageBox("can't open dll file");

 

       其中strDllUrl是mydll.dll路径的字符串,这样程序才能找到它。::LoadLibrary获得参数标识的DLL文件的句柄。

 

       获得句柄后,下面要获得函数地址以便执行它。有如下语句:

 

       FARPROC proc;

 

       proc=GetProcAddress(dllinstance,"go");

 

       if(proc==NULL) AfxMessageBox("can't find function");

 

       else proc();

 

FARPROC是一个远程过程指针,通过GetProcAddress获得函数的地址。它的两个参数就是dll文件句柄和函数的名字了。

 

然后FARPROC就可以和go一样的使用了,它就是go ,go 就是它。

 

而对于带参数的DLL中的函数,调用方法有所不同。因为对函数的调用是通过对它地址的引用进行的,这样,传入参数对不对,在函数调用程序的编译和联接过程中,无法知道其正确性。因此,要在调用程序中对DLL中带参数的函数做个声明,如mydll中的went,我们要做个声明如下:

 

typedef void (FAR __cdecl *MYWENT)(CString);

 

然后以类型MYWENT声明变量既可调用,如下:

 

       MYWENT myproc;

 

       myproc =(MYWENT)GetProcAddress(dllinstance,"go");

 

       if(myproc ==NULL) AfxMessageBox("can't find function");

 

       else myproc (“o-----yeah---------”);

 

注意声明的时候呢,由于DLL中WENT的定义为C语言调用规范,因此MYWENT前一定要用__cdecl,而VC中常用的__stdcall是PASCAL调用规范,不可以的。一定要注意
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值