我从客户端收到了一个非托管的DLL文件。这个DLL文件有一个返回XML流的重要方法。我不确定如何"捕捉"这个XML流,因为DLL文件几乎没有记录。这就是我所知道的:
- 我知道如何调用非托管DLL函数,但是我不熟悉结构体以及如何使用结构体从函数检索数据。
- "文档"说:你可以从函数
OpenXmlBridge
获得XML流句柄
这是我现在卡住的地方:
[DllImport("UnmanagedDllFile.DLL")]
public static extern void OpenXmlBridge();
我知道这在执行时返回void
,但我在这里不知所措。我还知道这个函数是存在的因为当我用一些随机的东西替换OpenXmlBridge
时,我得到了错误。所以到目前为止,我想我一直走在正确的道路上。我还没能找到从这里到底该做什么。
您可以使用UnmanagedMemoryStream
类。在这种情况下,您的包装器看起来像:
[DllImport("UnmanagedDllFile.DLL")]
public static extern IntPtr OpenXmlBridge();
访问它的代码是这样的:
var length = 0 //stream length here
var pointer = NativeWrapper.OpenXmlBridge();
using(var ms = new UnmanagedMemoryStream((Byte*)pointer, length){
var xDocument = new XmlDocument();
xDocument.Load(ms);
//process document
}