繁体   English   中英

我将如何使用将本机代码与C#中的多个从属库包装在一起的C ++ / CLI dll?

[英]How would i use a C++/CLI dll that wraps native code with multiple dependent libraries in C#?

我想知道如何正确设置一个C ++ / CLI库,该库包装具有多个依赖关系的本机c ++代码。 我尝试过静态和动态地将本机库链接到其从属库,但是没有运气。

托管C ++ / CLI dll构建良好,可以添加为对C#项目的引用。 但是,当我尝试使用任何已定义的类时,根据我的链接方式,我会收到BadImageFormatException或FileNotFoundException。 我相信我需要在CLI库中指定依赖库,以便将其加载到清单中,但是我不确定该过程。 另外,因为我知道它会出现,所以我已验证所有涉及的库都建立在x86体系结构上。

我发现了问题,现在一切正常。 这是一起发生的几种不正确的事情的结合。

如果有人遇到相同的问题,我可以通过以下方法解决:

1)被引用的Boost库(特别是boost_thread)需要使用BOOST_THREAD_USE_DLL预处理程序进行编译(其他boost库可能需要BOOST_ALL_DYN_LINK才能动态链接所有内容)。 这显然是一个常见问题。

2)我验证所有依赖项都在系统路径中(如R Ubben重申)

3)我使用了DependencyWalker(来自sourceforge的depends.exe)来分析我的已编译托管DLL。 原来,所使用的libpq.lib库实际上引用了不在lib文件夹中但在bin文件夹中的其他DLL。 因此,需要将其添加到路径中。

4)我的包装器的一部分使用了#include标头作为列表。 这迫使我的库链接到依赖于2.0框架的库。 这与我的4.0客户端目标C#应用程序不兼容。 只有通过编译警告就可以知道这一点(由于C ++生成了太多..foolish,我之前知道是隐藏的)。 但是,这导致尽管所有目标都针对相同的x86体系结构,都引发了System.BadImageFormateException。

希望对其他有相同问题的人有所帮助。 BadImageFormateException和FileNotFoundException过于模糊和无益。

您应该使C ++ dll处于发布模式,并将extern“ C”用于公共静态内容。

当依赖库不在路径中时,我得到了该错误。 因为有引用而找到了包装器库,但是该引用也不照顾相关的库。 尝试将它们明确放置在程序执行的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM