【问题标题】:C/C++ to C# converter or emulatorC/C++ 到 C# 转换器或模拟器
【发布时间】:2012-07-02 21:09:24
【问题描述】:

假设我有一些用于可移植、非可视库的 C 代码。代码主要依赖CRT(没有QT/DirectX/WinAPI等依赖)。

有没有办法可以在 C# 应用程序中使用此代码?我了解托管 C++,这对我来说不是一种可以接受的方式。

我想到了一个可以用于自动翻译的 C/C++ 到 C# 转换器(我不需要 可读 输出,一个可以工作的输出就足够了)或者我可以使用的模拟器执行编译的 C/C++ 代码。

你知道什么可以帮助我从 C# 代码中使用现有的 C/C++ 代码吗?

编辑:

P/Invoke 也不是可接受的方式。以及调用外部 EXE 或使用 COM/ActiveX。我需要一些能够让我将 C 和 C# 代码合并到一个托管 DLL 或 EXE 中的东西。

现有的 C 代码是库 (.lib),而不是 EXE。

【问题讨论】:

  • 这个 C 代码是一个适当的可执行文件还是只是一个库?无论如何,您可以将 P/Invoke 用于 C 库或在 exe 的情况下执行并捕获输出
  • 如果你不需要维护代码,为什么不创建一个DLL并引用它……比如COM+对象
  • 翻译不太可能实现,因为 C# 代码没有指针,将基于指针的代码转换为非基于指针的代码几乎不可能自动化。
  • 为什么将一个文件作为输出如此重要? Windows 应用程序只有一个可执行文件而没有附带文件的情况并不常见。

标签: c# c++ c emulation converter


【解决方案1】:

为什么不将 C++ 临时编译为托管 C++,得到一个 .net 程序集,然后使用 Reflector 将其反编译成纯 C#?

【讨论】:

  • 这是尽可能接近自动化,但结果可能不太好。
  • @MikhailKozhevnikov:纯托管,是的。安全且可验证,不。因此,并非所有纯 C++/CLI 程序集都可以完美地反编译为 C#。
  • +1 这很难看,但它似乎是解决 OP 问题的唯一答案。
  • 看来这是唯一的自动化方式。
【解决方案2】:

我认为直接从 DLL 中使用方法而不将代码转换为 C# 是最简单的。这很好用,一个缺点是您必须为不同的平台提供多个二进制文件。 从 Dll 导入函数就像

[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress (IntPtr hModule, string procedureName);

如果不转换前者,我认为将 C 和 C# 代码合并到一个 DLL 中是不可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多