0

我有 VC++ 代码,但我想将其转换为 C#。我尝试使用不同的软件,但它不会将 VC++ 的某些功能转换为 C#。我该怎么做?或者有什么方法可以直接在 c# 中使用 VC++ 代码?

例如这是 VC++ 方法,我想将其转换为 c#

    void init_gf (int poly)
  {

int m,b,p,v;

   // Return storage from previous setup



 if (log)

{

      free (log);

      free (alog);

      free (rspoly);

      rspoly = NULL;
   }

   // Find the top bit, and hence the symbol size

   for (b = 1, m = 0; b <= poly; b <<= 1)

      m++;

   b >>= 1;

   m--;

   gfpoly = poly;

   symsize = m;


   // Calculate the log/alog tables

   logmod = (1 << m) - 1;

   log = (int *) malloc (sizeof (int) * (logmod + 1));

   alog = (int *) malloc (sizeof (int) * logmod);


   for (p = 1, v = 0; v < logmod; v++)

   {

      alog[v] = p;

      log[p] = v;

      p <<= 1;

      if (p & b)

         p ^= poly;

   }

}
4

3 回答 3

1

你不能只是自动转换它。

转换纯逻辑可能是可能的,但 C++ 和 C# 使用完全不同的库。C++ 使用 C 运行时、MFC 等,而 C# 使用 .NET BCL。您至少需要学习 C++ 代码使用的类和方法的 .NET 等效项。

例如,您可以改用数组来转换 malloc 调用:
(int*) malloc (sizeof (int) * logmod);-->new int[logmod]();

如果代码很多,您可以考虑使用 C++/CLI 并创建一个混合模式库,方法是将 C++ 代码保持原样并公开充当代理的托管类型。

于 2012-07-24T06:16:56.460 回答
1

有没有办法直接在 C# 中使用 VC++ 代码?

C++/CLI 应用程序由 .NET 管理,如果是这种情况,那么您只需在 C# 项目中添加对项目或 dll 的引用并正常使用它

如果它是本机非托管代码,您可以使用 C# 或 C++/CLI 为其创建一个包装器,或者您可以使用 P/Invoke 直接调用它。

编辑:
插入符号运算符我错了,有点匆忙回答,对此感到抱歉!删除。

于 2012-07-24T06:33:35.317 回答
0

您有以下选项

  1. 仅将未自动转换为手动移植到 C# 的部分代码
  2. 将 VC++ 代码设为 COM 可见并使用 .NET 中的 COM 互操作
  3. 用 C# 完全重写组件并使用 VC++ 代码仅引用应用程序逻辑。

可能会发生转换后的代码包含不安全操作并且需要使用不安全标志进行编译的情况。我建议您通过查看自动转换的代码和手头的要求来决定是否值得使用自动转换器进行转换。

于 2012-07-24T06:16:25.023 回答