如何将VC ++代码转换为C#?

时间:2012-07-24 06:10:17

标签: c# visual-c++ c#-4.0 c#-3.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;

   }

}

3 个答案:

答案 0 :(得分:1)

您不能自动转换它。

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

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

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

答案 1 :(得分:1)

  

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

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

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

修改
我对插入符操作符错了,有点急着回答,对不起!删除。

答案 2 :(得分:0)

您有以下选项

  1. 只有部分代码未自动转换为手动移植到C#
  2. 将VC ++代码设置为COM Visible并使用.NET中的COM Inter-op
  3. 在C#&amp ;;中完全重写组件。仅使用VC ++代码来引用应用程序逻辑。
  4. 可能会发生转换后的代码包含不安全的操作,需要使用unsafe标志进行编译。我建议您通过查看自动转换的代码和手头的要求来决定是否值得使用自动转换器进行转换。