0

私には2つの機能があります。

  1. Cで定義されたコールバック関数を登録する。
  2. IntPtr バッファーで構成される C# のコールバック関数。

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;
}
4

2 に答える 2

-1

.net Framework がワイド文字で動作していることを確認してください。C でワイド文字を使用する必要があるかもしれません。

于 2013-09-16T15:52:55.053 に答える