如何转换VC++;代码到C#?

如何转换VC++;代码到C#?,c#,visual-c++,c#-4.0,c#-3.0,C#,Visual C++,C# 4.0,C# 3.0,我有VC++代码,但我想将其转换为C#。我尝试使用不同的软件,但它不会将VC++的某些功能转换为C#。我该怎么做?或者有没有办法直接在c#中使用VC++代码 例如,这是VC++方法,我想将其转换为c# void init\u gf(整数多边形) { int m,b,p,v; //从以前的设置返回存储 如果(日志) { 免费(原木); 免费(alog); 免费(rspoly); rspoly=NULL; } //找到顶部位,从而找到符号大小 对于(b=1,m=0;b您有以下选项 只有部分代码没有自

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

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

void init\u gf(整数多边形)
{
int m,b,p,v;
//从以前的设置返回存储
如果(日志)
{
免费(原木);
免费(alog);
免费(rspoly);
rspoly=NULL;
}
//找到顶部位,从而找到符号大小

对于(b=1,m=0;b您有以下选项

  • 只有部分代码没有自动转换为手动移植到C#
  • 将VC++代码设置为COM可见,并使用.NET中的COM交互
  • 在C#中完成组件的重写&仅使用VC++代码引用应用程序逻辑

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

    您不能只是自动转换它

    转换纯逻辑是可能的,但是C++和C语言使用完全不同的库。C++使用C运行时、MFC等,C++使用.NETBCL。你需要学习至少一点你的C++代码所使用的类和方法的.NET等价物。 例如,您可以使用数组来转换malloc调用:

    (int*)malloc(sizeof(int)*logmod);
    -->
    新建int[logmod]();

    如果代码很多,可以考虑使用C++ + CLI和创建混合模式库,通过将C++代码原样保留并公开托管代理的类型。 有没有办法直接在c#中使用VC++代码

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

    如果它是本机非托管代码,则可以使用C#或C++/CLI为其创建包装器,也可以使用p/Invoke直接调用它

    编辑:

    “我对插入符号运算符的理解是错误的,”有点匆忙地回答,“很抱歉!已删除。

    我认为没有直接的方法可以做到这一点。好吧,您可能需要重写它。根据它是什么类型的代码,您可以试着用它生成DLL。本例中的
    ^
    运算符与赋值运算符(
    ^=
    )一起使用。”,这使它成为一个按位异或运算。这将是一个按位AND运算。您可以检查C/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;
    
       }
    
    }