C#中怎样调用具有C++编写的CString类型参数的方法

函数原型为:
int GetParameter(CString&);

第1个回答  2011-08-23
这个还真的没搞过,不过建议你去查查 C++中 此类型 和C# 中那个类型对应,GetParameter(CString&) 此函数的意思 大概是类似C#中的按引用传递值。祝你早日找到答案
第2个回答  2011-08-23
[DllImport("Mysms.dll", EntryPoint = "C++方法名")]
public static extern 返回类型 方法名(StringBuilder 参数);追问

我在C#中使用
DllImport("Mysms.dll", EntryPoint = "C++方法名")]
public extern static int GetParameter(ref StringBuilder parameter);
不好使,总是报System.AccessViolationException异常。

追答

这说明你的参数类型不对,把StringBuilder 改为char[]

追问

char[]也不好使。现在就是不知道在C#应该设置为哪种类型。

追答

将ref去掉看看

追问

这样声明对于这个方法是可用的
DllImport("Mysms.dll")]
public extern static int GetParameter(ref string parameter);

但出现的一个新的问题。与这个方法对应的还有一个Setparameter(CString);的方法。声明如下:
DllImport("Mysms.dll")]
public extern static int SetParameter(string parameter);

如果反复调用者两个方法就会出错。错误描述如下:
“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

追答

EntryPoint = "C++方法名"加上也报错吗?

追问

嗯,加不加都一样。

追答

我觉得还是参数类型问题,我以前遇到过多次!你能看到那个C++函数吗?它的参数到底是什么类型的?

追问

就是CString类型的。这是MFC中的一个字符串类。

本回答被提问者采纳
第3个回答  2011-08-26
CString是MFC自己封装实现的一个类,又不是基本数据类型,
C#会有一模一样的数据结构和内存模型?我表示怀疑
内存模型不一致,怎么调用?

C#中怎样调用具有C++编写的CString类型参数的方法
这个还真的没搞过,不过建议你去查查 C++中 此类型 和C# 中那个类型对应,GetParameter(CString&) 此函数的意思 大概是类似C#中的按引用传递值。祝你早日找到答案

c#如何调用C++中的类
正如上文中提到的,C++的成员函数采用__thiscall的调用约定。所谓调用约定,是指在调用函数时如何传递参数,用什么顺序传递参数,以及由谁来负责清理堆栈的约定。__thiscall这个调用约定是不被托管程序的[DllImport]属性支持的。当然不排除一些拐弯抹角的方法是能调用的。即便如此也是极其不推荐的做法。参考资...

C++中如何把string转成CString?
一般我们在VC或VS开发工具上写代码时,直接使用CString类就可以了,不需要使用string类定义变量。但很多程序员在工具不熟悉开发工具时,经常会自然地使用来string类变量,而再使用MFC的某些函数时,又必须传递相应的CString类型参数,所以,会面临数据类型的转换,string类型变量转为为Cstring类型变量方法为:先...

C#中调用C++写的dll 中一个返回string的函数,结果返回是乱码_百度知 ...
c++的默认编码好像是Ansy,C#的是unicode。CString strRecieveStr;for(i=0;i<m_RecieveFrameHead.i16BufLenth;i++){ m_RecieveFrameHead.bDataBuf[i]=pFrameHeadStr->bDataBuf[i];} m_RecieveFrameHead.bDataBuf[i]=0;strRecieveStr.Format("%s",m_RecieveFrameHead.bDataBuf);你把返回的...

C\/C++ 中cstring用法?
C\/C++ 中cstring用法? 我定义了一个Cstringstr;charch;while(1){ch=getchar();str=str+ch;}我想用str来累计ch的值,要怎么写呢?代码就是报错才贴上来的啊... 我定义了一个Cstring str;char ch;while(1){ch = getchar();str = str+ch;}我想用str来累计ch的值,要怎么写呢?代码就是报错才贴上来的...

VC++中CString类成员函数Format()的用法是什么?
int) str.Format("%d",i); 浮点数(float) str.Format("%f",i); 字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username; 对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。满意请采纳 ...

c++ mfc 中提取编辑框中数字的方法,新手,求大神!
方法很多,有一种方法是 先得到编辑框中的CString类型的数据,然后将CString转化为char 数组类型,然后取出相应的字符,再转化为需要的类型。或者直接用CString里的成员函数,直接就能查找相应字符。

C++里面的cstring头文件
当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供了这样一种方法,它返回一个客户程序可读不可改的指向字符数组的指针。另外,输出string类对象的长度可以用cout<<s1.size()<<endl;参考资料:http:\/\/baike.baidu....

请问,C++如何对CString类型的数据转换为小数。
1、atoi 功 能:把一字符串转换为整数 用 法:int atoi(const char *nptr);详细解释:atoi是英文array to integer的缩写。atoi()会扫描参数nptr字符串,如果第一个字符不是数字也不是正负号返回零,否则开始做类型转换,之后检测到非数字或结束符 \/0 时停止转换,返回整型数。 参 数:nptr: 待转化...

关于c#使用这个mfc(dll)
CString 不是标准的C++语言,是MFC类库的一部分,你既然需要在C#中调用dll,最好dll参数和内部都用基础类型。c++的char*对应c#的string。参考http:\/\/blog.csdn.net\/dz45693\/archive\/2009\/09\/26\/4598867.aspx

相似回答