我正在用C ++ / CLR制作计算机应用程序,我碰壁了。我正在使用loadlibrary
函数加载dll,也可以调用这些函数,但是当我尝试发送参数时,例如,如果我的函数是:
std::string msgbox(std::string str)
{
MessageBoxA (0,str.c_str(),"TiTle", MB_OK | MB_ICONINFORMATION);
return str;
}
在本地c ++应用程序中,当我在loadlibrary
和getprocaddress
之后调用该函数时
std:: tmp = msg ("String");
tmp
变为“字符串”;并且我看到带有String作为消息的消息框,但是如果我使用C ++ / CLR,则如果我传入参数并且tmp变量也将包含一些垃圾文本,那么在消息框中打印消息内容时,我会像垃圾一样我只是以与我相同的方式加载它,但是没有这种垃圾
这也是输出和源代码:
来源:https://uploadfiles.io/itm93
错误图片:https://imgur.com/a/WM7MK4c
答案 0 :(得分:0)
似乎您正在用gcc编译c ++ dll。您不能在针对不同标准库编译的DLL /应用程序之间传递标准库类型。
您要么需要使用Visual Studio编译所有内容(并且使用相同的运行时库,就不能混合使用调试/发行版或静态/共享运行时),或者仅在dll边界上传递原始字符指针。