在C#中创建一个文件,并将其作为IntPtr传递给COM对象

时间:2010-01-29 18:25:56

标签: c# windows file com pointers

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

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

3 个答案:

答案 0 :(得分:4)

关于你必须传递什么作为“文件”你有点模糊 - 如果你有一个FileStream你可以将FileStream.Handle交给IntPtr(假设它期望一个HANDLE值)

请参阅“How to pass parameters of Type HANDLE from C# to C++ DLL”。

答案 1 :(得分:2)

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

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

如果它期待一个真正的Win32句柄。您需要浏览文件系统API以获取文件的句柄,然后将其传递给方法。

答案 2 :(得分:0)

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