我正在编写一个测试 C dll 的小型 C++ 程序,其中包含一些函数。这些 dll 存在于调试版本和发布版本中,我想用同一个程序加载它们并将它们与以前的版本进行比较。
问题是,当我用 release config 编译我的程序时,它只能使用也是 release 的 dll,而当我使用 debug config 编译程序时,它只能使用也是 debug 的 dll。
我使用 LoadLibrary 和 GetProcAddress 函数加载 dll/函数。
有两种类型的函数:
void type1(int&)
和void type2(vector<string>*)
。无论配置如何,类型 1 都可以正常工作。但是类型 2 仅在配置匹配时才有效。
代码:
typedef void(*GetNames)(vector<string>*
);
GetNames get_var_names = (*GetNames)GetProcAddress(dll,"get_var_names");
vector<string>
var_names;
get_var_names(&var_names);
最后一行是程序失败并出现类似“0xC0000005:访问冲突读取位置0xbaadf008”的错误。如果调用程序和dll的配置不匹配。当程序正在发布并且dll正在调试时,该错误是读取冲突,但是当程序正在调试并且dll正在发布时,错误是写入冲突。
该函数应该做的只是用不同的字符串调用 push_back("x") 几次。
在发布配置程序中使用调试dll似乎并非完全不可能,或者类型1的所有功能也不起作用,因此它似乎与向量或字符串类有关。
任何人都知道如何解决这个问题,或者我唯一的选择是使用具有不同配置的两个可执行文件?