C#从C读取utf-8字符串,win8下正常,xp下读出来为null

iChov 2013-08-30 03:14:04
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++里传的是英文还是汉字,都是如此
}
...全文
231 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-09-02
  • 打赏
  • 举报
回复
引用 3 楼 jshi123 的回复:
指向callback_method的委托变量应该要声明成静态或全局变量,防止gc回收。
采用这位朋友的建议试试
iChov 2013-09-02
  • 打赏
  • 举报
回复
很抱谦各位,这事儿可能乌龙了。 我把整个项目所有生成的文件自动清理+手工删除后,逐个重新生成后,问题解决了。 从最终执行的项目,到c++的dll之间,有两层嵌套引用,Debug模式一直是重新生成最终执行的项目,都正常。Release生成的时候,也是用的同样方法,重新生成最终执行项目,但貌似这个时候vs的依赖生成出了点问题,中间c#类库可能没有按照预期自动重新生成,但也没有报错。 看了各位的回复,确定代码上没有使用错误,我才想到全部清理一遍,问题也就随之解决了。 谢谢各位的指点。
真相重于对错 2013-09-02
  • 打赏
  • 举报
回复
如果是unicode你也不应该用char* 而是tchar*
真相重于对错 2013-09-02
  • 打赏
  • 举报
回复
引用 13 楼 iChov 的回复:
[quote=引用 12 楼 hdt 的回复:] c# 是什么类型项目
c#也是一个dll类库 c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。[/quote] 没有限制,c++是什么项目?项目的编码?涉及到多线程吗?
iChov 2013-09-02
  • 打赏
  • 举报
回复
引用 12 楼 hdt 的回复:
c# 是什么类型项目
c#也是一个dll类库 c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。
真相重于对错 2013-09-02
  • 打赏
  • 举报
回复
c# 是什么类型项目
真相重于对错 2013-09-02
  • 打赏
  • 举报
回复
看错了,c++应该没有大问题
真相重于对错 2013-09-02
  • 打赏
  • 举报
回复
你的c++是什么类型的项目? 如果你的c++代码如你所贴, 感觉你的c++的函数有很大问题,
hangang7403 2013-09-02
  • 打赏
  • 举报
回复
是不是引用的库函数有问题
iChov 2013-09-02
  • 打赏
  • 举报
回复
问题在于,同样的代码,在Debug模式下是对的,Release生成后,再运行就是null。
iChov 2013-09-02
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
static void callback_method(StringBuilder val) { ... } 这样呢?
这样也不行,同样是null
tcmakebest 2013-09-01
  • 打赏
  • 举报
回复
不要用 string,因为 C 里是无法生成 C# 中的类型的。 按下面的改成 IntPtr 后,再好再增加一个整数参数表示数据长度。

static void callback_method(IntPtr val)
{
}
EnForGrass 2013-08-31
  • 打赏
  • 举报
回复
public static void callback_method(ref byte val) { } 或者 public static void callback_method(string val) { }
threenewbee 2013-08-31
  • 打赏
  • 举报
回复
static void callback_method(StringBuilder val) { ... } 这样呢?
jshi123 2013-08-31
  • 打赏
  • 举报
回复
指向callback_method的委托变量应该要声明成静态或全局变量,防止gc回收。
iChov 2013-08-30
  • 打赏
  • 举报
回复
C#是.NET 4.0 C++是v110_xp 又测了一下,发现跟操作系统没关系,Debug模式能收到数据,Release收到的是null。
czz65979674 2013-08-30
  • 打赏
  • 举报
回复
能说下 你的开发环境么 比如NET fram版本 VS版本

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧