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

时间:2010-05-28 14:55:29

标签: 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其中一个。

感谢名单!

P.S。也许这很有用:http://www.libraw.org/

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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