我正在尝试将二进制数据从 .NET 获取到 FoxPro(一种兼容 COM 的语言)。我有一个 ComVisible 的 .NET 对象和一个带有字符串参数的事件的事件接口。
在下面的示例中,我有一个虚拟实现,它返回一个包含从 0 到 255 的每个连续字符的字符串。在 .NET 端,该字符串适当地存储了每个未被干扰的字符,但是在客户端处理事件时,128 到 154 之间的字符转换为问号。超过 154 个字符再次保持不变。
知道是什么导致了这个问题吗?不幸的是,FoxPro 没有办法在本地表示二进制数据,并且需要在字符串中对其进行curry。
[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();
}