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直接无法编译
  • GetProcAddress
    • 返回 NULL:error = 127
    • dll 生成函数名已经出现错误了,不是你自己写的那个函数名,查看dll函数名工具:Dependency Walker,它可能运行得很慢,可以先在该可执行文件的目录下通过命令行set PATH = 0 再执行denpendency walker会快很多
posted @ 2022-04-06 19:32  YSMY  阅读(614)  评论(0编辑  收藏  举报