【问题标题】:Using .dll methods to load data from file in C# code在 C# 代码中使用 .dll 方法从文件中加载数据
【发布时间】:2010-05-28 14:55:28
【问题描述】:

我想在 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# c++ dll pinvoke


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您必须为 C# DLL 创建 RCW 以使它们在 VC++ 中可用,请参阅以下链接可能有用,因为它提供了实现相同目标的分步指南:-

      http://www.codeproject.com/KB/atl/ComWarpperForDotNet.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多