2012-07-24 263 views
0

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

例如这是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; 

    } 

} 
+0

我不认为有直接的方法来做到这一点。 AFAIK您可能需要重写它。 – Anuraj 2012-07-24 06:15:16

+0

取决于它是什么类型的代码,你可以试着制作一个DLL。 – 2012-07-24 06:15:16

+0

哎如何制作dll呢? – 2012-07-24 06:19:29

回答

0

您有以下选项

  1. 只有它不会自动转换为手动是部分代码移植到C#
  2. 将VC++代码制作为COM可见并使用.NET中的.NET Inter-op
  3. 完成对C#中组件的重写&使用VC++代码仅用于引用应用程序逻辑。

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

1

你不能自动转换。

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

例如,您可以通过使用数组来代替转换的malloc电话:
(int*) malloc (sizeof (int) * logmod); - >new int[logmod]();

如果这是一个很大的代码,你可以考虑使用C++/CLI并创建一个混合模式的库,由保留C++代码,并公开用作代理的托管类型。

1

有什么办法可以直接在C#中使用VC++代码?

C++/CLI应用程序由.NET托管的,如果是这样的话,那么你可以在你的C#项目只需添加到项目的引用或DLL和使用它通常

如果是本地非托管代码,您可以使用C#或C++/CLI为它打包,也可以使用P/Invoke将其命名为direclty。

编辑:
我是错的^操作符,回答有点着急的,我们对此深感抱歉!删除。

+2

在这种情况下,'^'运算符与赋值运算符('^ =')一起使用,这使得它成为按位异或运算。 – Botz3000 2012-07-24 06:34:52

+0

什么Botz Sayed – Nahum 2012-07-24 06:41:16

+0

关于&运算符? – 2012-07-24 07:26:04