c#调用dll,c++的std::string参数怎么处理,谢谢

问题描述

//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

c#调用dll,c++的std::string参数怎么处理,谢谢的相关文章

第三方dll文件-Java中利用jawin调用dll文件,invoke的参数问题

问题描述 Java中利用jawin调用dll文件,invoke的参数问题 各位大神: dll中的被调用方法如下: long WINAPI AutoOpenComPort(long* Port, unsigned char *ComAdr, unsigned char Baud,long *FrmHandle); 其中: Port:输出变量, ComAdr:输入/输出变量 Baud:输入变量 FrmHandle:输出变量 请问它的 msgBox.invoke(instructions, stack

请教java通过JNative调用dll的问题,HWND参数如何创建。

问题描述 JNativen=null;n=demo.getJNativeByFunction("InitDLL");n.setRetVal(Type.INT);HWNDhwnd=newHWND(0);n.setParameter(0,hwnd.getValue());n.invoke();如此调用报错:-----------------------------------------------------------------------------------##Anunexpe

c++-C#调用C++生成的dll时,报错参数不匹配

问题描述 C#调用C++生成的dll时,报错参数不匹配 C++代码 int WINAPI ilbc_encoder(short pin,unsigned char pout) { int k; float block[BLOCKL_MAX]; /* convert signal to float */ for (k=0; k<iLBCenc_inst.blockl; k++) block[k] = (float)pin[k]; /* do the actual encoding */ iLBC_

c++的问题- error C2440: “默认参数”: 无法从“const char [7]”转换为“std::string &amp;amp;amp;”

问题描述 error C2440: "默认参数": 无法从"const char [7]"转换为"std::string &" 代码如下: 1 #include 2 using namespace std; 3 class Student{ 4 string name; 5 public: 6 Student(string& n ="noName") :name(n){} 7 }; 8 class Teache

请教C++调用DLL改用C#调用DLL方法和类型映射

问题描述 现在有一个C++的dll,原来是C++项目使用,现在有一个C#项目想使用这个DLL,调用这个dll的时候一些类型映射,不知道C++中的类型,应该映射成C#中的什么类型,该怎么写,请教大神.C++调用DLL的代码如下主要不知道下面这三种C++中的参数,用C#改写该映射成什么类型constTCHAR*sLogDirconststd::list<conststd::pair<LPCSTR,LPCSTR>>&listParamsParamPair*pPairs reape

C#程序实现动态调用DLL的研究

原文:C#程序实现动态调用DLL的研究 C#程序实现动态调用DLL的研究 摘  要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决"DLL Hell"提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也

Sql Server 调用DLL

原文:Sql Server 调用DLL 背景 在处理数据或者分析数据时,我们常常需要加入一定的逻辑,该些处理逻辑有些sql是可以支持,有些逻辑SQL则无能为力,在这种情况下,大多数人都会编写相关的程序来处理成自己想要的数据,但每次处理相同逻辑时,都需要运行一次程序非常麻烦. 案例 IE地址栏上的地址在记入日志表中时,其数据是通过编码的,如果我们想要看到明文,则需要相应的解码,可以用SQL语句来实现,如: 摘自:http://blog.csdn.net/ruijc/article/details/

jnative 调用dll文件

问题描述 我在myEclipse工具中建了一个java类,里面写的是jnative调用dll文件,但不知道怎么老是错误!//源代码publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException{System.loadLibrary("test");JNativejnative=newJNative("test","show");jnative.setRe

C++: std::string 与 Unicode 如何结合?

关键字:std::string Unicode 转自:http://www.vckbase.com/document/viewdoc/?id=1293   一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单.基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于_UNICODE 的值:     1: // abridged from tchar.h 2:  3: #ifdef _UNICODE 4:  5: typedef wchar_t TCHAR; 6:  7: