繁体   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