C++/clr 添加本机 c++ dll 库
C++/clr adding a native c++ dll library
我正在用 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";我看到一个带有 String 作为消息的消息框,但是如果我使用 C++/CLR,如果我传入参数并且 tmp 变量也会包含一些垃圾文本,我会在消息框中打印消息内容时得到一些垃圾怎么办我只是像现在一样加载它,但没有这些垃圾
这也是输出和源代码:
资料来源:https://uploadfiles.io/itm93
错误图片:https://imgur.com/a/WM7MK4c
看起来你正在用 gcc 编译你的 c++ dll。您不能在针对不同标准库编译的 DLLs/applications 之间传递标准库类型。
您要么需要使用 visual studio 编译所有内容(以及相同的运行时库,您不能混合使用 debug/release 或 static/shared 运行时),要么只传递原始字符指针dll 边界。
我正在用 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";我看到一个带有 String 作为消息的消息框,但是如果我使用 C++/CLR,如果我传入参数并且 tmp 变量也会包含一些垃圾文本,我会在消息框中打印消息内容时得到一些垃圾怎么办我只是像现在一样加载它,但没有这些垃圾
这也是输出和源代码:
资料来源:https://uploadfiles.io/itm93
错误图片:https://imgur.com/a/WM7MK4c
看起来你正在用 gcc 编译你的 c++ dll。您不能在针对不同标准库编译的 DLLs/applications 之间传递标准库类型。
您要么需要使用 visual studio 编译所有内容(以及相同的运行时库,您不能混合使用 debug/release 或 static/shared 运行时),要么只传递原始字符指针dll 边界。