c# - 如何使用 C 程序中的现有 C# 代码

标签 c# .net c dll interop

有没有一种方法可以开发示例 C# 程序,将其制作成 DLL,然后在我的 C 程序中使用它?

比如说,C# DLL 有一个函数 add(int a, int b) 返回或打印结果。我想在我的 C 程序中使用它。任何示例链接都应该是一个很好的帮助。

最佳答案

最简单的方法是将 C# DLL 公开为 COM 对象,然后从您的 C/C++ 应用程序创建它的实例。参见 MSDN获取分步指南。

或者,如果它实际上是一个您希望能够从中调用 C# DLL 的 C++ 应用程序,您可以创建一个混合模式 C++/CLI 应用程序,其中包含托管和非托管代码.然后,C++ 应用程序可以直接从托管的 C# DLL 调用函数。

另见 "An Overview of Managed/Unmanaged Code Interoperability"在 MSDN 上。


编辑: 除了“它在 C 中不起作用”之外,没有任何更多信息,我什至不知道您尝试了上述哪些建议。正如我所建议的,我不确定第二个是否可以直接使用 C(从未尝试过),但我看不出第一个为什么不能。

无论如何,快速而肮脏的解决方法可能是将 C# 函数包装在 C++ DLL 中,然后您可以从 C 应用程序中调用它。确保将要从 C++ DLL 导出的任何函数声明为 extern,否则它们的名称将被损坏的 C++ 名称,这在 C 中是不可能使用的。有关更多信息,请参见此处信息:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

关于c# - 如何使用 C 程序中的现有 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313584/

相关文章:

c# - WPF ComboBox TextSearch 使用 Contains 而不是 StartsWith

c# - Func<T, T> 到 T 的通用隐式转换

c# - 所有 Process* 方法和所有消息过滤器的目的是什么?

c# - 在 .NET 中更改代码中的 UserAgent

c# - 如何使用 C#/WinForms 在运行时从 ComboBox 中删除项目

.net - 我可以避免在调试器附带调试器的情况下避免缓慢的.net异常吗?

c# - Entity Framework 中的一个事务中的多个数据库

c - fclose 返回值检查

c++ - arr[0] 的大小怎么是 8 个字节?

c - mingw printf大小规范字符h