日期:2014-05-17  浏览次数:20969 次

C#从C读取utf-8字符串,win8下正常,xp下读出来为null
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++里传的是英文还是汉字,都是如此
}
interop c c# xp

------解决方案--------------------
能说下 你的开发环境么 比如NET fram版本 VS版本
------解决方案--------------------
指向callback_method的委托变量应该要声明成静态或全局变量,防止gc回收。
------解决方案--------------------
static void callback_method(StringBuilder val)
{
   ...
}

这样呢?
------解决方案--------------------
public static void callback_method(ref byte val)
{

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

}
------解决方案--------------------
不要用 string,因为 C 里是无法生成 C# 中的类型的。
按下面的改成 IntPtr 后,再好再增加一个整数参数表示数据长度。

static void callback_method(IntPtr val)
{
}

------解决方案--------------------
是不是引用的库函数有问题
------解决方案--------------------
看错了,c++应该没有大问题

------解决方案--------------------
引用:
Quote: 引用:

c# 是什么类型项目


c#也是一个dll类库

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


没有限制,c++是什么项目?项目的编码?涉及到多线程吗?