【发布时间】:2011-07-20 22:19:40
【问题描述】:
有没有办法为 C++ 非托管项目创建包装器 clr:safe?
我的小故事是这样开始的,
“男孩,你必须做一个项目‘C# COM Interop’,但这个项目必须使用‘C++ 库’并且必须只生成‘一个’(dll COM)。”
好的,经过几天的搜索,我意识到可以通过两种方式使用 C++ 库:添加资源和使用 PInvoke 调用或创建包装器 C++/CLI。使用 PInvoke 我不能只有一个 dll(对吗?)。所以我选择了第二个选项“wrapper C++/CLI”。一开始看起来很简单,我重新编译了 Visual Studio 2005 到 2010 的库,创建了一个 CLR 项目(带有 keypair.snk 并重新签名)添加了该库。作品! \0/ 现在我将使用 ILMerge,哦,这是什么?只有 clr: 安全吗?为什么?好的,我尝试将 C++/CLI 重新编译为 clr:safe 但出现错误...
我该如何解决这个问题?
非常感谢,
【问题讨论】:
-
我不确定这与 COM 有什么关系。共有三种互操作:P/Invoke; C++ 互操作(代号“It Just Works”); COM 互操作。由于您没有告诉我们出现了什么错误,因此我们无法帮助修复它们。
-
@Ben Voigt。错误就像“错误C4956:'const wchar_t *':这种类型不可验证”......在搜索了更多之后,我意识到不可能将非托管代码合并到托管代码。我会试试这个“codeblog.larsholm.net/2011/06/…”。如果不可能,我将在 dll 中添加资源并使用 P/Invoke。谢谢
标签: c# c++ clr wrapper unmanaged