c# - 在 .NET Compact Framework 的托管代码 (C#) 中使用非托管 (C) 缓冲区

标签 c# .net c windows windows-ce

我有两个功能。

  1. 注册一个用 C 语言定义的回调函数。
  2. C#中的回调函数,由一个IntPtr缓冲区组成。

在 C 中,我创建一个字节缓冲区并使用回调函数更新 IntPtr。

问题是,我无法打印 C# 标签对象中的缓冲区。但我可以在 MessageBox 中显示这一点。

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 边界。

关于c# - 在 .NET Compact Framework 的托管代码 (C#) 中使用非托管 (C) 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18780622/

相关文章:

c# - 如何检测文件不是 ANSI-Latin1?

c - 从 STDIN 读取一行以仅使用 C 提取数字标记

c++ - Floodfill 替换为 GDI?

C文件读取留下乱码

c# - 将组合框中的特定字符/数字/文本传递给 C# 中的变量

c# - 如何在 typescript 中表示 Guid?

c# - 使用 Interop.Word,有没有办法进行替换(使用 Find.Execute)并保持原始文本的对齐方式?

.net - .NET WinForms 中最大化 MDI 子项的多个控制按钮

c# - TransactionScope 和手动回滚事务之间的区别?

c# - Azure函数输出API调用第三方服务