【发布时间】:2011-03-22 21:29:00
【问题描述】:
我在我的 C# 应用程序中使用旧的 C 库(构建为 DLL)。此库中的函数之一需要传递FILE*(在 ANSI C 中定义)。有什么方法可以在 C# 中为 System.IO.File、stdout 和 stderr 获取 FILE* 句柄?
或者有什么办法可以解决这个问题,有什么想法、提示等等...?
提前致谢。
【问题讨论】:
标签: c# .net dll file-handling crt
我在我的 C# 应用程序中使用旧的 C 库(构建为 DLL)。此库中的函数之一需要传递FILE*(在 ANSI C 中定义)。有什么方法可以在 C# 中为 System.IO.File、stdout 和 stderr 获取 FILE* 句柄?
或者有什么办法可以解决这个问题,有什么想法、提示等等...?
提前致谢。
【问题讨论】:
标签: c# .net dll file-handling crt
我还没有尝试过,但它可能会起作用......
System.IO.File.Create()/Open() 将返回一个 FileStream,您可以从那里使用 FileStream.SafeFileHandle,从那里 SafeFileHandle.DangerousGetHandle() 将为您提供本机操作系统 HANDLE。
然后在非托管 C 中,_open_osfhandle() 将获取您的 HANDLE 并返回一个 int 文件描述符。将此传递给 _fdopen(),它将返回一个 FILE*。
一条很长的路,有很多不兼容和其他问题的机会。但你可能很幸运!
【讨论】:
malloced 字符串中生成文本;我经常发现自己不确定是编写这样的格式化程序还是直接写入文件!