[英]Passing a byte array from C# into C++ com object with C++ filling array
我需要將一個字節數組傳遞給C#中的C ++ com對象。 然后C ++將填充緩沖區以供C#讀取。
c ++函數定義
STDMETHODIMP CSampleGrabber::GetBuffer(byte* bd)
{
int p=0;
while (p< nBufSize) {
bd[p]=pLocalBuf[p];
p++;
}
c#代碼:
byte[] byTemp = new byte[nBufSize];
igb.GetBuffer(ref byTemp);
這個程序毫無例外地崩潰了。 請有人幫忙。 謝謝
解決了:
同
byte[] byTemp = new byte[nBufSize];
GCHandle h = GCHandle.Alloc(byTemp, GCHandleType.Pinned);
igb.GetBuffer(h.AddrOfPinnedObject());
謝謝
該參數不應聲明為ref
。 你想要的東西:
uint GetBuffer(byte[] bd);
如果你包含ref
那么當你只需要數組時,你會傳遞一個指向數組的指針。 (並且通過數組,我指的是指向第一個元素的指針。)
我知道這是一個老問題,但谷歌把我帶到這里,所以它可能帶來其他人。 如果你使用P / Invoke來調用:
... GetBuffer(byte* bd)
它應該看起來像是一些東西
[DllImport("MyDll.dll")]
... GetBuffer(ref byte bd);
並且應該像這樣傳入c#中的緩沖區數組:
var arr = new byte[Length];
GetBuffer(ref arr[0]);
這也適用於char*
,因為你可以傳入相同的byte
數組引用,然后使用string s = Encoding.<encoding>.GetString(arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.