调用c++组件问题 c++写的组件里有一个 void的函数,参数是 in/out 类型的。我在c#里定义一个 static 的 string a,调用这个函数后,a的值却没有发生改变。调用该组件里其他有返回值的函数是可以得到返回值的。请问这是什么原因呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、检查a在函数体内是否真的有变化2、把a传递给其他函数,看看是否a有变化这样就确定问题在传递方,还是接受方的函数有问题了============================================技术交流不该有界限 资源共享不该有条件http://blog.csdn.net/lovingkisshttp://download.csdn.net/user/lovingkissEmail:loving-kiss@163.com本人说明:<我的帖子我做主>1、欢迎一切问题有关的交流——无论答案对错;2、不欢迎 顶、Mark、支持之类口水混分的人;我保留对非<散分贴>蹭分者的厌恶和鄙视...精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握所以,我没有精通,只有JZ============================================ You may call the procedure as following:public static extern void(..., out a, ...) 如果在C中是指针类型,就要使用 byte[] msg,如下:public static extern void(..., byte[] msg),然后 a = System.Text.Encoding.Default.GetString(msg); 好象不行啊,这个函数只有一个参数(in/out类型)如果直接调用可以写成public static extern void(string a)按照NekChan的方法public static extern void(string a,out a)编译不通过.下面的方法 msg是哪里获得的呢?还望指点~谢谢 如果换成public static extern void(string s,out string a) 报错无效参数 试试添加using System.Runtime.InteropServices;假设你的dll为NetSpy.dll 你的函数名为GetStr(char* a)[DllImport("NetSpy.dll", CharSet=CharSet.Ansi)]public static extern void GetStr(ref string a); 组件里函数是void _declspec(dllexport) Encrykey(LPSTR usrkey)我的代码如下:在类usedll里生明:[DllImport.....]public static extern void EncryKey(string usrkey);然后给出方法供程序调用public void Encrykeynew(string usrkey){ Encrykey(usrkey);}接下来就可以在程序里实例化并调用usedll.Encrykeynew(userkey);按照hertcloud的修改成 ref string 后我如何在程序里定义并提供这个ref string 呢? using System.Runtime.InteropServices; using System.Runtime.InteropServices 引用过了 已经解决。用stringbuider 类型的对象把该参数带入即可。谢谢楼上各位的帮助。 DesignSurface制作设计器遇到的问题 using 里面的代码出了异常还会关闭数据库吗? 正则表达式应用--提取CSDN所有下载资源URl的思路与代码实现分享 如何判断是邮件系统发来的邮件 学C# socket编程 要看什么书好 [C# WinForm]能不能更改DataGrid里某一列的字体颜色?如果能,如何实现?(求助) 给Tab Control 发送消息的问题 请教! 怎样使用现有类? 一个.net framework 类库的疑问 C中的链表等数据结果如何在C#中实现? 后台如何调用前台函数?
2、把a传递给其他函数,看看是否a有变化这样就确定问题在传递方,还是接受方的函数有问题了============================================
技术交流不该有界限 资源共享不该有条件
http://blog.csdn.net/lovingkiss
http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主>
1、欢迎一切问题有关的交流——无论答案对错;
2、不欢迎 顶、Mark、支持之类口水混分的人;
我保留对非<散分贴>蹭分者的厌恶和鄙视...
精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
所以,我没有精通,只有JZ
============================================
public static extern void(..., byte[] msg),
然后 a = System.Text.Encoding.Default.GetString(msg);
public static extern void(string a)
按照NekChan的方法
public static extern void(string a,out a)编译不通过.
下面的方法 msg是哪里获得的呢?
还望指点~谢谢
using System.Runtime.InteropServices;
假设你的dll为NetSpy.dll 你的函数名为GetStr(char* a)[DllImport("NetSpy.dll", CharSet=CharSet.Ansi)]
public static extern void GetStr(ref string a);
void _declspec(dllexport) Encrykey(LPSTR usrkey)我的代码如下:
在类usedll里生明:[DllImport.....]
public static extern void EncryKey(string usrkey);然后给出方法供程序调用
public void Encrykeynew(string usrkey)
{
Encrykey(usrkey);
}
接下来就可以在程序里实例化并调用
usedll.Encrykeynew(userkey);按照hertcloud的修改成 ref string 后我如何在程序里定义并提供这个ref string 呢?
用stringbuider 类型的对象把该参数带入即可。
谢谢楼上各位的帮助。