c# - 在 C# 代码中使用 .dll 方法从文件加载数据

标签 c# c++ dll pinvoke

我想在 C# 中使用这些方法:

*      int LibRaw::open_datastream(LibRaw_abstract_datastream *stream)
*      int LibRaw::open_file(const char *rawfile)
*      int LibRaw::open_buffer(void *buffer, size_t bufsize)
*      int LibRaw::unpack(void)
*      int LibRaw::unpack_thumb(void)

存储在 libraw.dll 中。这些函数一一从文件加载数据...我一直在阅读有关 P/Invoke 的信息,但我不确定如何调用它们。任何人都可以向我展示如何在 C# 中一起使用所有这些函数来加载文件(存储在文件夹中的原始图像)或者如何 PIvoke 其中之一。

谢谢!

附注也许这可能有用:http://www.libraw.org/

最佳答案

在我工作的地方,我们发现最好的方法是用 C++/CLI 编写包装代码。我以为我有一篇关于这个过程的好博客文章,但显然不是。我确实有两篇较短的文章,一篇是关于如何使用 unmanaged static libraries 的和一个 how to wrap libraries (在托管 C++ 中与 C++/CLI 相对)。解决方案是相似的 - 只是您必须链接到一个加载 dll 的 stub 库或自己加载 dll 并调用 GetProcAddress 来获取您正在包装的例程。

优点是您可以直接从 C++/CLI 调用非托管代码,并且可以控制编码发生的时间和方式。缺点是您是用 C++ 编写的,您必须控制编码的发生方式。

关于c# - 在 C# 代码中使用 .dll 方法从文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930055/

相关文章:

c# - EF 不同对象的相同位置

c++ - Visual Studio 2010 的全局源代码控制忽略模式中应包含哪些内容?

c++ - 编译的程序找不到 freeglut.dll

c++ - 如何一次从文件中读取两个十六进制值

c# - 可移植类库中的 System.ComponentModel.DescriptionAttribute

delphi - 从 Delphi 代码调用 Visual C++ DLL 的函数

c# - 从(多个)用户输入(应用程序密码)中获取数据库密码

c# - 如何用C#在智能卡上写入文件

c# - Ajax 请求后 .NET 后端的奇怪响应

c++ - 我怎样才能创建一个表?