2012-07-24 260 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