C++中接口函数:
HRESULT GetInfo(CHAR* szInfo),在此函数中szInfo返回一段字符串。
在C#中调用此函数时参数该怎么定义才能取到szInfo的值啊,Visual Studio中提示GetInfo(ref sbyte szInfo),但是也不对啊,各位路过的大神帮忙看看,谢谢!
HRESULT GetInfo(CHAR* szInfo),在此函数中szInfo返回一段字符串。
在C#中调用此函数时参数该怎么定义才能取到szInfo的值啊,Visual Studio中提示GetInfo(ref sbyte szInfo),但是也不对啊,各位路过的大神帮忙看看,谢谢!
OperationClass simOP = new OperationClass();
simOP.GetInfo(ref sbyte szInfo);请问红色部分的参数该怎么写我才能取到szInfo的值呀
根据我这个情况给个具体代码吧(C#初学,C++完全没有接触过),不是我非要用ref sbyte这个啊,因为用其他类型的参数编译都通不过,至于StringBuider、IntPtr以及数组我在网上也看到了,但是根据我这个情况具体该怎么应用呢?
{
fixed (sbyte* tmp = &szInfo)
{
return new string(tmp);
}
}
http://blog.csdn.net/wheatfield/article/details/5843517
强大!这个方法确实可以取到!但是却也报错了:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
我的调用代码如下:
OperationClass simOP = new OperationClass();
sbyte szInfo = 0;
simOP.GetInfo(ref sbyte szInfo);
string s = FromSbyte(ref s);这是怎么回事呢
另外是哪一行报错的?
代码如下:
1 OperationClass simOP = new OperationClass();
2 sbyte szInfo = 0;
3 simOP.GetInfo(ref szInfo);
4 string s = FromSbyte(ref szInfo);我逐句debug,发现断点设置在第三行前面,那么执行第三行后就会出错,出错内容:“检测到 FatalExecutionEngineError
Message: 运行库遇到了错误。此错误的地址为 0x79e84ab1,在线程 0xbbc 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
”,如果断点设置在第三行后面或者不设置断点,那么就直接弹出错误:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
你试试给一个缓冲区给它,这样写:
1 OperationClass simOP = new OperationClass();
2 sbyte[] szInfo = new sbyte[1024];
3 simOP.GetInfo(ref szInfo[0]);
4 string s = FromSbyte(ref szInfo[0]);