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

3
我正在使用C#处理一些COM对象,其中一个对象有一个名为SetLogFile的函数,该函数需要一个IntPtr参数。我该如何在C#中创建文件,并将其作为IntPtr参数传递给该COM函数?
编辑:该函数需要一个打开的文件句柄:http://msdn.microsoft.com/en-us/library/aa915939.aspx
3个回答

4

2
这在很大程度上取决于SetLogFile方法对IntPtr参数的具体要求。如果它需要一个COM对象,并且C#方法实现了适当的接口,您可以使用以下代码传递变量。
var ptr = Marshal.GetIUnknownForObject(theParameter);
try {
  theComObject.SetLogFile(ptr);
} finally {
  Marshal.Release(ptr);
}

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接