调用“项目”函数与调用DLL函数之间的区别

时间:2018-08-27 14:28:37

标签: c++ c++11 memory loadlibrary

我目前有一个以这种方式调用C ++ DLL函数的C ++示例:

typedef BOOL(__stdcall *f_funci)(const char*, char*);

HINSTANCE hGetProcIDDLL = LoadLibrary(L"myDLL.dll");
f_funci DoSmth= (f_funci)GetProcAddress(hGetProcIDDLL, "function");

std::string test = "The cake is a lie, it's actually a Brownie...";

char *out = new char[124];
DoSmth(&test[0], out);

和DLL函数原型:

BOOL function(const char *in, char *out){}

问题是,当我调用此DLL函数时,使用in[x](无论x的值如何)(使用Visual Studio调试器),我得到的都是完全随机的结果。

但是,如果我只是将此函数粘贴到我的.cpp中,则in[x]始终是我期望得到的结果。

我验证了什么

  • 按预期,DLL函数的调用约定为stdcall。
  • 示例和DLL均在以下上下文中-调试-x64-

我认为它可能来自什么,但对确保是/否答案了解不足:

  • “简单调用”和GetProcAddress之间的内存管理区别?
  • 调试器问题(考虑到在DLL调用情况下out值也为false会很奇怪)
  • 其他?

如果有不清楚的地方,请考虑询问详细信息。

1 个答案:

答案 0 :(得分:0)

哼...我找到了解决方案,但我不知道它怎么能解决任何问题...

我实际上只是重新编译了dll(使用相同的选项,相同的格式和内容),现在结果很好,并且运行良好。

如果有人对此有解释或线索,我就参加了。

感谢所有答复和帮助!