C#中一个callback方法,是从C里向C#传utf-8字符串。在win8下运行正常,xp下得到的字符串是null,请大家帮忙分析一下。
char* str;
//接收到网络数据并保存到str,确定有值,非null
callback(str); //调用c#中的方法,传字符串static void callback_method(string val)
{
//此处val,win8下能即到数据,xp下却是null,不管c++里传的是英文还是汉字,都是如此
}
interopcc#xp

解决方案 »

  1.   

    能说下 你的开发环境么 比如NET fram版本 VS版本
      

  2.   

    C#是.NET 4.0
    C++是v110_xp又测了一下,发现跟操作系统没关系,Debug模式能收到数据,Release收到的是null。
      

  3.   

    指向callback_method的委托变量应该要声明成静态或全局变量,防止gc回收。
      

  4.   

    static void callback_method(StringBuilder val)
    {
       ...
    }这样呢?
      

  5.   

    public static void callback_method(ref byte val)
    {}
    或者
    public static void callback_method(string val)
    {}
      

  6.   

    不要用 string,因为 C 里是无法生成 C# 中的类型的。
    按下面的改成 IntPtr 后,再好再增加一个整数参数表示数据长度。static void callback_method(IntPtr val)
    {
    }
      

  7.   

    问题在于,同样的代码,在Debug模式下是对的,Release生成后,再运行就是null。
      

  8.   

    你的c++是什么类型的项目?
    如果你的c++代码如你所贴,
    感觉你的c++的函数有很大问题,
      

  9.   


    c#也是一个dll类库c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。
      

  10.   


    c#也是一个dll类库c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。没有限制,c++是什么项目?项目的编码?涉及到多线程吗?
      

  11.   

    如果是unicode你也不应该用char* 而是tchar*
      

  12.   

    很抱谦各位,这事儿可能乌龙了。
    我把整个项目所有生成的文件自动清理+手工删除后,逐个重新生成后,问题解决了。
    从最终执行的项目,到c++的dll之间,有两层嵌套引用,Debug模式一直是重新生成最终执行的项目,都正常。Release生成的时候,也是用的同样方法,重新生成最终执行项目,但貌似这个时候vs的依赖生成出了点问题,中间c#类库可能没有按照预期自动重新生成,但也没有报错。
    看了各位的回复,确定代码上没有使用错误,我才想到全部清理一遍,问题也就随之解决了。
    谢谢各位的指点。