如何从非托管DLL文件中检索XML文件流

本文关键字:文件 检索 XML DLL | 更新日期: 2023-09-27 18:11:01

我从客户端收到了一个非托管的DLL文件。这个DLL文件有一个返回XML流的重要方法。我不确定如何"捕捉"这个XML流,因为DLL文件几乎没有记录。这就是我所知道的:

  1. 我知道如何调用非托管DLL函数,但是我不熟悉结构体以及如何使用结构体从函数检索数据。
  2. "文档"说:你可以从函数OpenXmlBridge
  3. 获得XML流句柄

这是我现在卡住的地方:

[DllImport("UnmanagedDllFile.DLL")]
public static extern void OpenXmlBridge();

我知道这在执行时返回void,但我在这里不知所措。我还知道这个函数是存在的因为当我用一些随机的东西替换OpenXmlBridge时,我得到了错误。所以到目前为止,我想我一直走在正确的道路上。我还没能找到从这里到底该做什么。

如果任何人都能给我指出正确的方向,这样我就可以从这个函数中检索XML流句柄。任何帮助或提示都非常感谢。

如何从非托管DLL文件中检索XML文件流

您可以使用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
}