在调用动态库是碰到如下问题:
动态库:test.dll,函数:int DoCase(int i,int j);
调用:
HINSTASNCE hins;
hins = LoadLibrary("test.dll");
int (*DOCASE)(int,int);//声明一个指针函数. 不用Typedef来做
DOCASE = GetProcAddress(hins, "DoCase");
int k = DOCASE(1,1); //编译时,本句报错为什么呢?是调用方法的问题吗?
动态库:test.dll,函数:int DoCase(int i,int j);
调用:
HINSTASNCE hins;
hins = LoadLibrary("test.dll");
int (*DOCASE)(int,int);//声明一个指针函数. 不用Typedef来做
DOCASE = GetProcAddress(hins, "DoCase");
int k = DOCASE(1,1); //编译时,本句报错为什么呢?是调用方法的问题吗?
解决方案 »
- VC MFC 一个很奇怪的问题
- 怎么做个端口影射的小程序?
- 照着书抄ADO代码,结果编译时说RxRecordset这种类型的变量不认识,怎么办?
- socket程序已编好,差个界面
- 在dll中增加extern "C" 是什么意思?
- php中调用c++写的exe,如何保留全局参数
- SOCKET问题,求教!!
- 高分求救:一个关于vfw的问题
- 线程中使用Ado对数据库进行update和insert操作的问题(急)
- 使用CHttpFile类获取网页源代码,字符编码问题,出来的乱码,不知如何解决?
- 如何将DC中的内容,旋转180度打印出来?
- (求助)使用压缩库ZipArchive.lib压缩文件到内存时出现问题!!!
int k = dcfn(1,1);
如果是空的话,那就是
int DoCase(int i,int j);
该函数在dll里的导出名字不叫“DoCase”了。
解决方法:
1. 察看dll的导出函数表,看看DoCase的真实名称,比如"?DoCase@@YAXH@Z"之类
2. 修改dll的源代码,把函数声明为extern "C"
DOCASE = GetProcAddress(hins, "DoCase");這行出錯,GetProcAddress返回void*要用強制類型轉換
DOCASE = (int(*)(int,int))GetProcAddress(hins, "DoCase");