使用动态加载的方式使用动态库。
loadlibrary()
成功加载动态库
之后使用GetProcAddress()
方法得到函数指针却返回空值,使用GetLastError()
方法得到错误代码127
出现此错误的原因一般是要加载的函数名称与动态库中函数名称不一致,要从库中加载的函数名为multiply
用depends.exe
查看动态库文件,函数名称是?multiply@@YAIXZ
,这是使用c++编译后的函数修饰名
怀疑是动态库导出的函数符号名字问题
动态库头文件
#pragma once
__declspec(dllexport) int multiply(int);
class __declspec(dllexport) cABC{
private:
char symbol;
public:
cABC(char symbol);
void print_l();
};
百度原因,使用extern “C”
可以将导出函数名字固定。c与c++编译器不同。c++支持函数重载,实现方法是在编译阶段的函数被重命名变成函数名加参数名,类似?multiply@@YAIXZ
这种代号,而c编译器就不会有这种机制了。加入extern “C”,能够实现c/c++混合编程。程序按照c编译器的方式编译链接。<