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

时间:2013-04-25 07:39:43

标签: c# xml dll stream unmanaged

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

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

    这就是我现在陷入困境的地方:

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

    我知道这会在执行时返回void但我在这里不知所措。我也知道这个函数会出现,因为当我用一些随机的东西替换OpenXmlBridge时,我会遇到错误。所以到现在为止,我想我一直走在正确的轨道上。我无法从这里找到准确的做法。

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

1 个答案:

答案 0 :(得分:1)

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