簡體   English   中英

使用C ++填充數組將C#中的字節數組傳遞給C ++ com對象

[英]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.

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