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

C# 如何在C中从非托管DLL文件中检索XML文件流#,c#,xml,dll,stream,unmanaged,C#,Xml,Dll,Stream,Unmanaged,我从客户端收到一个非托管DLL文件。这个DLL文件有一个返回XML流的重要方法。我不知道如何“捕获”这个XML流,因为DLL文件几乎没有文档记录。这就是我所知道的: 我知道如何调用非托管DLL函数,但是我不熟悉结构以及如何使用结构从函数中检索数据 “文档”中说:您可以从函数OpenXmlBridge 这就是我目前所处的困境: [DllImport("UnmanagedDllFile.DLL")] public static extern void OpenXmlBridge(); 我知道执行时

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

  • 我知道如何调用非托管DLL函数,但是我不熟悉结构以及如何使用结构从函数中检索数据
  • “文档”中说:您可以从函数
    OpenXmlBridge
  • 这就是我目前所处的困境:

    [DllImport("UnmanagedDllFile.DLL")]
    public static extern void OpenXmlBridge();
    
    我知道执行时会返回
    void
    ,但我现在不知所措。我还知道这个函数是exists,因为当我用一些随机的东西替换
    OpenXmlBridge
    时,我会出错。所以直到现在,我想我一直在正确的轨道上。我还没能弄清楚到底该怎么办


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

    您可以使用
    非托管MemoryStream
    类。在这种情况下,你的包装看起来像:

    [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
    }
    

    如果您不知道本机dll中的函数定义,可以尝试