2012-07-02 45 views
3

假設我有一些用於便攜式,非可視庫的C代碼。代碼主要依賴於CRT(沒有QT/DirectX/WinAPI等依賴項)。C/C++到C#轉換器或仿真器

有沒有一種方法可以在C#應用程序中使用此代碼?我知道關於託管C++,這是而不是對我來說是一個可以接受的方式。我想我可以用於自動翻譯的C/C++到C#轉換器(我不需要可讀的輸出,一個工作的輸出就足夠了),或者我可以用來執行編譯的C的一個模擬器/ C++代碼。

你知道任何可能幫助我使用C#代碼中的現有C/C++代碼嗎?

編輯:

P/Invoke也不是一個可以接受的方式。以及調用外部EXE或使用COM/ActiveX。我需要的東西可以讓我將C和C#代碼合併到一個受管DLL或EXE中。

現有的C代碼是一個庫(.lib),而不是EXE。

+0

這是C代碼一個適當的可執行文件或只是一個庫?無論如何,你可以使用C庫的P/Invoke或執行exe的情況下,並捕獲輸出 – RedX

+0

http://stackoverflow.com/questions/935664/possible-to-call-c-code-from-c –

+0

翻譯是因爲C#代碼沒有指針,並且將基於指針的代碼轉換爲基於非指針的代碼實際上不可能實現自動化。 –

回答

6

爲什麼不暫時將C++編譯爲託管C++,以獲得.net程序集,然後使用Reflector將其反編譯爲純C#?

+1

這是儘可能接近自動化,因爲你可以得到,但結果不太可能漂亮。 –

+0

謝謝!我會試試這個。 – Bobrovsky

+0

是否有可能編譯任何C++代碼作爲託管?.. – Qnan

0

我認爲最簡單的方法就是直接使用DLL中的方法,而無需將代碼轉換爲C#。這工作得很好,一個缺點是你必須爲不同的平臺提供多個二進制文件。 從DLL的導入功能一樣簡單

[DllImport("kernel32.dll")] 
public static extern IntPtr GetProcAddress (IntPtr hModule, string procedureName); 

我不認爲合併C和C#代碼在一個DLL是無需轉換前者是可行的。