【问题标题】:How to retrieve XML file stream from unmanaged DLL file in C#如何从 C# 中的非托管 DLL 文件中检索 XML 文件流
【发布时间】:2013-04-25 07:39:43
【问题描述】:

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

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

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

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

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

任何人都可以为我指明正确的方向,以便我可以从此函数中检索 XML 流句柄。非常感谢任何帮助或提示。

【问题讨论】:

标签: c# xml dll stream unmanaged


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多