C ++ / clr添加本机c ++ dll库

时间:2018-08-19 17:50:44

标签: c++-cli

我正在用C ++ / CLR制作计算机应用程序,我碰壁了。我正在使用loadlibrary函数加载dll,也可以调用这些函数,但是当我尝试发送参数时,例如,如果我的函数是:

std::string msgbox(std::string str)
{
    MessageBoxA (0,str.c_str(),"TiTle", MB_OK | MB_ICONINFORMATION);
    return str;
}

在本地c ++应用程序中,当我在loadlibrarygetprocaddress之后调用该函数时

std:: tmp = msg ("String");

tmp变为“字符串”;并且我看到带有String作为消息的消息框,但是如果我使用C ++ / CLR,则如果我传入参数并且tmp变量也将包含一些垃圾文本,那么在消息框中打印消息内容时,我会像垃圾一样我只是以与我相同的方式加载它,但是没有这种垃圾

这也是输出和源代码:
来源:https://uploadfiles.io/itm93
错误图片:https://imgur.com/a/WM7MK4c

1 个答案:

答案 0 :(得分:0)

似乎您正在用gcc编译c ++ dll。您不能在针对不同标准库编译的DLL /应用程序之间传递标准库类型。

您要么需要使用Visual Studio编译所有内容(并且使用相同的运行时库,就不能混合使用调试/发行版或静态/共享运行时),或者仅在dll边界上传递原始字符指针。