我正在尝试将二进制数据从.NET传输到FoxPro(一种兼容COM的语言)。我有一个.NET对象,它是ComVisible的,并且具有带有字符串参数的事件接口。
在下面的示例中,我有一个虚拟实现,返回一个包含从0到255的每个连续字符的字符串。在.NET端,该字符串适当地存储每个未修改的字符,但在客户端处理事件时,128到154之间的字符被转换为问号。超过154个字符再次保持不变。
你知道是什么原因导致了这个问题吗?不幸的是,FoxPro没有本地表示二进制数据的方法,需要在字符串中传递它。
在下面的示例中,我有一个虚拟实现,返回一个包含从0到255的每个连续字符的字符串。在.NET端,该字符串适当地存储每个未修改的字符,但在客户端处理事件时,128到154之间的字符被转换为问号。超过154个字符再次保持不变。
你知道是什么原因导致了这个问题吗?不幸的是,FoxPro没有本地表示二进制数据的方法,需要在字符串中传递它。
[Guid("974E3133-9925-4148-8A2B-F4B811072B17"), ComVisible(true), ComSourceInterfaces(typeof(IStreamEvents))]
public class DumbSerialPort {
readonly string _buf;
public event DataReceivedHandler DataReceived;
public event EmptyDelegate Error;
public DumbSerialPort() {
var bbuf = new char[255];
for (int c = 0; c < 255; c++)
bbuf[c] = (char)c;
_buf = new string(bbuf);
}
public void Fire() {
if(DataReceived != null)
DataReceived(_buf);
}
}
[Guid("0F38F3C7-66B2-402B-8C33-A1904F545023"), ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IStreamEvents {
void DataReceived(string data);
void Error();
}