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
char* str;
//接收到网络数据并保存到str,确定有值,非null
callback(str); //调用c#中的方法,传字符串static void callback_method(string val)
{
//此处val,win8下能即到数据,xp下却是null,不管c++里传的是英文还是汉字,都是如此
}
interopcc#xp
C++是v110_xp又测了一下,发现跟操作系统没关系,Debug模式能收到数据,Release收到的是null。
{
...
}这样呢?
{}
或者
public static void callback_method(string val)
{}
按下面的改成 IntPtr 后,再好再增加一个整数参数表示数据长度。static void callback_method(IntPtr val)
{
}
如果你的c++代码如你所贴,
感觉你的c++的函数有很大问题,
c#也是一个dll类库c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。
c#也是一个dll类库c++调用c#的回设方法,有参数个数的限制吗?我现在遇到的这个参数是第5个参数,第3、4也是字符串,是有值的。没有限制,c++是什么项目?项目的编码?涉及到多线程吗?
我把整个项目所有生成的文件自动清理+手工删除后,逐个重新生成后,问题解决了。
从最终执行的项目,到c++的dll之间,有两层嵌套引用,Debug模式一直是重新生成最终执行的项目,都正常。Release生成的时候,也是用的同样方法,重新生成最终执行项目,但貌似这个时候vs的依赖生成出了点问题,中间c#类库可能没有按照预期自动重新生成,但也没有报错。
看了各位的回复,确定代码上没有使用错误,我才想到全部清理一遍,问题也就随之解决了。
谢谢各位的指点。