dll处于调试模式,以释放模式调用程序(反之亦然)

Dan*_*ele 5 c++ dll

我正在编写一个测试C dll的小型C ++程序,其中包含一些功能。这些dll存在于调试版本和发行版本中,我想用同一程序加载它们,并将它们与以前的版本进行比较。

问题是,当我使用release config编译程序时,它只能使用也发布的dll,而当我使用debug config编译程序时,它只能使用也调试的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);
Run Code Online (Sandbox Code Playgroud)

最后一行是程序失败的地方,并显示诸如“ 0xC0000005:访问冲突读取位置0xbaadf008”的错误。如果调用程序和dll的配置不匹配。该错误是在程序被释放并且dll被调试时的读取冲突,但是在程序被调试并且dll被释放时的写入冲突。

该函数应该做的只是使用不同的字符串多次调用push_back(“ x”)。

在发行配置程序中使用调试dll似乎并不是完全不可能的,或者类型1的所有功能也不起作用,因此似乎与vector或string类有关。

任何人都不知道如何解决这个问题,或者使用两个具有不同配置的可执行文件是我唯一的选择?