因为第三方可能只给你xx.dll, 并不会给你xx.lib 所以你必须采用这种方式调用。
调用方法,和函数大家都知道,loadlibrary
1) LoadLibrary("dll path")
2) 获得class 或者function 的内存指针
getprocAdress
GetProcAddress()
这里只是需要在调用的文件处,typedef 一下,这个exprot的函数指针
此处需要注意的调用方式就可 __ccall __stdCall
typedef void* (__cdecl *kfbreader_PCTOR)();
typedef bool* (__cdecl *kfbreadeInfor_fun)(std::string, int, int, int, int);
之后,就可以实例化 class,
函数指针调用 函数。
我这这里遇到的几个问题,是,
getprocAddress的时候,总是失败。
比如,我有个export 的class 里面有个function
int myADD(int,int)
myadd = (MyAdd)GetProcAddress(hst, "MyADD");
总是失败的。
后来给定了dll 里面dumpbin 出来的,解释性地址,才get 成功
myadd = (MyAdd)GetProcAddress(hst, "?myAdd@MyDLL@@QEAAHHH@Z");
C:\Users\Yingyan.li>dumpbin.exe -exports E:\Project\TestProject\MyTianChiTest\x64\Re
lease\myDLL.dll
Microsoft (R) COFF/PE Dumper Version 14.00.24215.1
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file E:\Project\TestProject\MyTianChiTest\x64\Release\myDLL.dll
File Type: DLL
Section contains the following exports for myDLL.dll
00000000 characteristics
5DA82A2B time date stamp Thu Oct 17 16:45:31 2019
0.00 version
1 ordinal base
4 number of functions
4 number of names
ordinal hint RVA name
1 0 00001020 ??0MyDLL@@QEAA@XZ = ??0MyDLL@@QEAA@XZ (public: __cdecl MyD
LL::MyDLL(void))
2 1 00001030 ??1MyDLL@@QEAA@XZ = ??1MyDLL@@QEAA@XZ (public: __cdecl MyD
LL::~MyDLL(void))
3 2 00001010 ??4MyDLL@@QEAAAEAV0@AEBV0@@Z = ??4MyDLL@@QEAAAEAV0@AEBV0@@
Z (public: class MyDLL & __cdecl MyDLL::operator=(class MyDLL const &))
4 3 00001040 ?myAdd@MyDLL@@QEAAHHH@Z = ?myAdd@MyDLL@@QEAAHHH@Z (public:
int __cdecl MyDLL::myAdd(int,int))
Summary
1000 .data
1000 .gfids
1000 .pdata
1000 .rdata
1000 .reloc
1000 .rsrc
1000 .text
但是要注意,看好对应的函数名。
我翻了很多web 资源,没有一个这样解决的。
所以一定要分享出来。
目前这个文章有点乱。
等随后我再整理一下。
因为我调用别的库的时候,又有问题待解决。
thanks