c++写的组件里有一个 void的函数,参数是 in/out 类型的。
我在c#里定义一个 static 的 string a,调用这个函数后,a的值却没有发生改变。
调用该组件里其他有返回值的函数是可以得到返回值的。
请问这是什么原因呢?

解决方案 »

  1.   

    1、检查a在函数体内是否真的有变化
    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
    ============================================
      

  2.   

    You may call the procedure as following:public static extern void(..., out a, ...)
      

  3.   

    如果在C中是指针类型,就要使用 byte[] msg,如下:
    public static extern void(..., byte[] msg),
    然后 a = System.Text.Encoding.Default.GetString(msg);
      

  4.   

    好象不行啊,这个函数只有一个参数(in/out类型)如果直接调用可以写成
    public static extern void(string a)
    按照NekChan的方法
    public static extern void(string a,out a)编译不通过.
    下面的方法 msg是哪里获得的呢?
    还望指点~谢谢
      

  5.   

    如果换成public static extern void(string s,out string a) 报错无效参数
      

  6.   

    试试添加
    using System.Runtime.InteropServices;
    假设你的dll为NetSpy.dll 你的函数名为GetStr(char* a)[DllImport("NetSpy.dll", CharSet=CharSet.Ansi)]
    public static extern void GetStr(ref string a);
      

  7.   

    组件里函数是
    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 呢?
      

  8.   

    using System.Runtime.InteropServices;
      

  9.   

    using System.Runtime.InteropServices 引用过了
      

  10.   

    已经解决。
    用stringbuider 类型的对象把该参数带入即可。
    谢谢楼上各位的帮助。