簡體   English   中英

在.NET Compact Framework中的托管代碼(C#)中使用非托管(C)緩沖區

[英]Use unmanaged(C) buffer in managed code(C#) in .NET Compact Framework

我有兩個功能。

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

檢查.net Framework是否使用寬字符,因此也許您應該在C中使用寬字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM