visual studio2019生成dll后调用失败
visual studio2019生成dll后调用失败
dll生成的bug
- vs配置和平台的选择,debug x86还是debug x64。
- 生成时是否需要预编译头pch.h(如果完全从零开始造可以先忽略,如果不是,.h文件的顺序可能需要调整,vs导入已有文件的时候pch.h有问题)
- 生成的名称,如果是函数,尤其是公共的函数,可以通过extern"C"来保证函数名就是dll生成的名字,如果是类的方法(emm..想来好像确实是我没有加,但是网上有帖子说对extern"C"对类的方法无效,但是我也不知道,再斟酌一下吧)
用动态库/dll调用的debug过程
- 有两轮获取指针:
HMODULE hModule = LoadLibrary(_T("core.dll"));
动态库dllmain中定义的一个入口;functionC C = (functionC)GetProcAddress(hModule,"gen_chain_char");
,functionC是参数组的指针类型
这两个其中一个得到了NULL的值,都会导致dll调用失败
HMODULE hModule
失败,是vs平台选错了= =,或者传入地址错了,或者和Unicode、LPCSTR、string等格式类型有关- x86 or x64 的错误 :error = 173; 可以用
cout<<GetLastError()<<endl;
查看error的情况 - 传入dll的地址错了,考虑是否要加"./"或者是否可以绝对路径
- Unicode、string : _T("core.dll"); 其中 _T是#include "tchar.h"中的宏定义 ,如果没有 _T转化也会导致错误,如果没有include直接无法编译
- x86 or x64 的错误 :error = 173; 可以用
- GetProcAddress
- 返回 NULL:error = 127
- dll 生成函数名已经出现错误了,不是你自己写的那个函数名,查看dll函数名工具:Dependency Walker,它可能运行得很慢,可以先在该可执行文件的目录下通过命令行
set PATH = 0 再执行denpendency walker会快很多