在 .NET Compact Framework 的托管代码 (C#) 中使用非托管 (C) 缓冲区
本文关键字:缓冲区 Framework 托管代码 NET Compact | 更新日期: 2023-09-27 18:31:20
我有两个函数。
- 注册在 C 中定义的回调函数。
- C# 中的回调函数,它由 IntPtr 缓冲区组成。
在 C 语言中,我创建一个字节缓冲区并使用回调函数更新 IntPtr。
问题是,我无法在 C# 标签对象中打印缓冲区。但我能够在消息框中显示这一点。
C# 函数:
private void button1_Click(object sender, EventArgs e)
{
Tempclass.RegCallback(Callback);
}
public void Callback(IntPtr data,ref int size)
{
byte[] ReadData = new byte[size];
Marshal.Copy(data, ReadData, 0, size);
String szData = Encoding.UTF8.GetString(data, 0, size);
label1.Text = szData; // error is here.
}
C 函数:
typedef void (__stdcall * Callback)( _Out_ byte* , _Out_ int*);
void RM2RegImgCallback (_In_ Callback pfnCallback)
{
char buffer[4]={0x64,0x65,0x66,0x00};
DWORD size =4;
pfnCallback((byte*)buffer,(int*)&size);
return;
}
您的代码不完整。 Tempclass.Regcallback
长什么样子? 您应该在某个时候调用GetFunctionPointerForDelegate
,该调用的结果应该是跨越 P/Invoke 边界的结果。
检查 .net Framework 是否正在使用宽字符,所以也许你应该在 C 中使用宽字符。