问题描述
//c++中的dll函数,参数为std::string,函数的目的是将值赋给nameextern"C"_declspec(dllexport)voidGetInfo(std::string&strName,std::stringstrDevice);那么c#调用它,参数怎么写呢,谢谢,std::string在c#中没有对应的类型,如果用System.String程序会崩溃
解决方案
解决方案二:
原来想这种传出的,要用stringBuilder,用string不行,如果是传入的则两者都可以
解决方案三:
这种DLL连同一个VisualC++版本的不同配置都不兼容,更别说其他语言了。要求DLL作者改程序,用标准C做接口。
解决方案四:
个人感觉崩溃的原因是因为接口中使用的cstring需要使用者自行分配空间,用string类型赋值时就写出界了。建议使用stringbuilder,同时按照c++中的约定长度进行初始化。
解决方案五:
可以使用byte[]接收,然后自己处理。至于怎么处理,这个看你本事了。只要你预算足够,我保证你能做出来。
解决方案六:
这没法传了,只能找开发人改接口,改成char*
解决方案七:
voidGetInfo(ref[MarshalAs(UnmanagedType.LPStr)]strName,[MarshalAs(UnmanagedType.LPStr)]strDevice);LPStr表示ANSILPWStr表示UNICODEref表示strName应该传引用,自己看吧
解决方案八:
楼主请看到我:你可以参考这本书:精通.NET互操作:P/Invoke、C++Interop和COMInterop里面对你说的这些说的很详细
时间: 2024-08-29 04:43:08