私には2つの機能があります。
- Cで定義されたコールバック関数を登録する。
- 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;
}