1

我知道我可以使用 dll 导入 + 包装(托管)在 C# 应用程序中使用 C++ 库(问题链接>>)但相反的是什么?如何在我的 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# 库(更多关于这个问题>>)。如果我不需要 C#,我会将我的 C++\CLI 库重新编码为本机库。我认为这非常有用。

4

3 回答 3

1

没有命令行界面?

您可以使用反向 P/Invoke来完成

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

于 2013-09-03T12:02:42.273 回答
0

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

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

于 2019-05-29T18:14:02.600 回答
-1

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

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

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

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

于 2013-09-03T11:59:54.283 回答