【问题标题】:C# library to native C++ applicationC# 库到本地 C++ 应用程序
【发布时间】:2013-09-06 15:38:04
【问题描述】:

我知道我可以使用 dll 导入 + 包装(托管)在 C# 应用程序中使用 C++ 库 (question link>>),但相反的是什么?如何在我的 C++ 应用程序中使用 C# 库?我将在 C# 库中处理事件/操作/结果,但我的应用程序是用 C++ 创建的。例如,这是我的 C++ 应用程序:

//本例中; Manager 将是我的 C# 库的实例,Log 是 C# 库的函数,可以打印一些东西。 (这只是一个例子,不起作用。为了描述一些东西来理解我的问题)

int main()
{
   if(MySystem.Start() == 0) //If there is no error
   {
      Manager.Log("System started successfully!"); //Post it to C# library!
   }
   return 0;
}

编辑: 解决方案应该是原生 C++。我不会使用 C++\CLI!

编辑:只有 c++ 应用程序是本机的。即我可以创建一个共享的 C++ 库来处理 C# 库。 C++ 应用程序。(事件)>> C++\CLI 库。 >> C# 库,这种方式是可行的。有没有例子/主题/起点?

>> 我的解决方案(回答后,应该​​对其他人有帮助): 我将创建一个 C++\CLI 共享库,并将其与我的本机 C++ 应用程序。这个库将处理我的 C# 库 (more about in this question>>)。如果我不需要 C#,我会将我的 C++\CLI 库重新编码为本机库。我认为这非常有用。

【问题讨论】:

标签: c# c++ port


【解决方案1】:

CoreRT 允许为 windows、linux 和 osx x64 平台编译本机库,这避免了您使用 C++ 兼容层。 CoreRT 使用 NetCore,而 NetCore 不支持 C++/CLI。

https://dev.to/encrypt0r/writing-native-libraries-in-c-3kl

【讨论】:

  • @Jean-François Fabre 这不是垃圾邮件。我认为举报者不恰当地标记了这些内容。
  • OP 多次发布同一个链接。我已经清除了第一个垃圾邮件标志,但没有清除其他垃圾邮件标志。 4 篇帖子宣传同一个工具
  • @Jean-FrançoisFabre 没有禁止同一链接出现在多个答案中;其中一个考虑因素是问题是否相互重复?如果是,则可以删除副本上的答案,但不能删除源上的答案。如果完全相同的内容出现在多个答案上;我们尝试通过关闭重复项并删除已关闭问题的重复答案来消除问题。
【解决方案2】:

没有 CLI?

你可以使用Reverse P/Invoke来做到这一点

http://tigerang.blogspot.co.il/2008/09/reverse-pinvoke.html

【讨论】:

【解决方案3】:

您必须注意将您的接口从 C# 库公开到与 C++ 兼容的层。

在我的脑海中,你可以做两件事:

  • 在您的 C# 库之上创建一个 C API(最好的方法是在您的库中添加一个 C++/CLI 层)。

  • 为您的 C# 库创建一个 COM 接口,并通过 COM 对象使用该库。

【讨论】:

猜你喜欢
  • 2014-09-30
  • 2019-10-25
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2015-10-27
  • 2012-02-15
  • 1970-01-01
相关资源
最近更新 更多