【问题标题】:Wrapper C++ in C++/CLI clr:safe for C# COM InteropC++/CLI 中的包装器 C++ clr:safe for C# COM Interop
【发布时间】: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


【解决方案1】:

ILMerge 不是解决此问题的正确工具。

相反,您将 C# 编译为 .net 模块,并将其与所有 C++/CLI 目标文件一起传递给 C++/CLI 链接器。

【讨论】:

  • 对不起,我无法理解您的回答。我有 em COM C#,这个用途(使用 C++/CLI clr 的 C# lib 不安全)。我想部署在一个 dll 中。谢谢
  • 谢谢。我尝试“如果您自己将非托管 DLL 提取到临时目录中,则将其作为资源嵌入”stackoverflow.com/questions/666799/… 并且可以工作!但我不能使用 GetManifestResourceStream :( 所以我使用了 Properties.Resources.UnmanagedDLL.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多