【问题标题】:Create a File in C# and pass it as an IntPtr to a COM object在 C# 中创建一个文件并将其作为 IntPtr 传递给 COM 对象
【发布时间】:2010-01-29 18:25:56
【问题描述】:

我正在使用 C# 中的一些 COM 对象,其中一个有一个名为 SetLogFile 的函数,它接受一个 IntPtr。如何在 C# 中创建文件,然后将其作为 IntPtr 传递给该 COM 函数?

编辑:该函数需要一个打开的文件句柄:http://msdn.microsoft.com/en-us/library/aa915939.aspx

【问题讨论】:

    标签: c# windows file com pointers


    【解决方案1】:

    您对于必须作为“文件”传递的内容有点模糊 - 如果您有 FileStream,您可以将 FileStream.Handle 作为 IntPtr 提交(假设它期望 HANDLE 值)

    见“How to pass parameters of Type HANDLE from C# to C++ DLL”。

    【讨论】:

      【解决方案2】:

      这在很大程度上取决于SetLogFile 方法期望接收的IntPtr 参数的确切内容。如果它需要一个 COM 对象并且 C# 方法实现了适当的接口,则可以使用以下方法来传递变量。

      var ptr = Marshal.GetIUnknownForObject(theParameter);
      try {
        theComObject.SetLogFile(ptr);
      } finally {
        Marshal.Release(ptr);
      }
      

      如果它需要一个实际的 Win32 句柄。您需要通过文件系统 API 获取文件句柄,然后将其传递给方法。

      【讨论】:

        【解决方案3】:

        您可能可以使用 FileStream 对象的SafeFileHandle 属性。不过,我不确定这样做的后果,因此 P/Invoke CreateFile 可能更安全。

        【讨论】:

          猜你喜欢
          • 2012-09-12
          • 1970-01-01
          • 2016-07-29
          • 2018-12-16
          • 1970-01-01
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          • 2011-09-10
          相关资源
          最近更新 更多