0

Firefox (Gecko) 3.5 代码中公开了以下内容:

[Guid("fa9c7f6c-61b3-11d4-9877-00c04fa0cf4a"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsIInputStream
{
    void Close();
    int Available();
    int Read(IntPtr aBuf, uint aCount);
    int ReadSegments(IntPtr aWriter, IntPtr aClosure, uint aCount);
    bool IsNonBlocking();
}

因此,我在我的小 .Net/C# 应用程序中,想要利用我从代码中其他地方返回的这个实例,但我无法确定如何处理该int Read(IntPtr aBuf, uint aCount)方法。

我想byte[]用从该方法收到的内容填充本地数组Read,但我不确定如何处理 IntPtr 或如何将其转换回托管字节数组。

任何提示/猜测/指针?(双关语不是故意的)

4

2 回答 2

1

根据这篇 pinvoke 文章,您应该能够将方法签名更改为:

int Read([Out] byte[] aBuf, uint aCount);
于 2009-10-21T12:41:45.860 回答
0

使用现有定义,您需要使用 Marshal.AllocHGlobal 来分配非托管内存块并将指向它的指针传递给方法。返回时使用 Marshal.Copy 将内存复制到托管字节 [] 并使用 Marshal.FreeHGlobal 释放分配的非托管内存。

于 2009-10-22T08:25:38.830 回答