2011-06-14 58 views
0

我有一個WCF服務接受來自客戶端的請求。 在分析了我需要生成(編譯+鏈接)C++ EXE的請求之後。 從C#應用程序創建C++ EXE的最佳方法是什麼?從C#應用程序生成C++可執行文件

10X

+2

什麼事情* C++可執行*是什麼意思?你想從一個WCF服務中將一些C++源代碼編譯成一個可執行文件? – 2011-06-14 08:32:50

+0

使用所有的本地接口來告訴g ++(或其他)來編譯程序嗎? – Tim 2011-06-14 08:33:21

+0

什麼?!你能澄清更好嗎?如果你確實需要一個C++可執行文件,我想你可以使用編譯器服務並在內存或磁盤頭文件和cpp文件中創建它們,並將它們編譯成一個exe文件,最終你會得到託管的.NET C++可執行文件......這是你真的需要什麼? – 2011-06-14 08:34:21

回答

0

我只能猜測什麼是你想要的,但我相信你的要求是這樣的:

  • 您的服務器上運行的WCF服務的地方。
  • 在收到某個調用後,服務必須根據它接收到的參數輸出(二進制)可執行文件。
  • 應該使用C++作爲中間語言。

讓我們看看你需要什麼。明顯的第一個要求是可以通過編程方式調用的C++編譯器/鏈接器。在Unix系統上,這將是g ++,你可以簡單地通過shell調出來調用它;在Windows上,g ++也是可用的(名字爲MinGW),但是版本相當過時,所以使用微軟的命令行C++編譯器可能會更好。

顯然,您還需要在某處生成C++源代碼;我假設每個請求的大部分源代碼都差不多,所以你可能需要某種模板系統。如果它不是太複雜,這可以像對一堆模板文件運行正則表達式搜索和替換一樣簡單;否則,您需要一個適當的模板語言(XSLT內置於.NET中,儘管語法需要一些習慣)。

然後膠水使它一起工作;我建議是這樣的:

  • 讀取請求,並創建一個合適的數據結構(在格式模板引擎可以消耗)
  • 將數據傳遞給模板引擎,輸出文件寫入到一個臨時文件夾
  • 調用編譯器的臨時位置
  • 讀取可執行回來,將其發送到客戶端
  • 刪除臨時文件夾

由於編譯通常是一個代價高昂的操作,因此請考慮緩存生成的可執行文件(除非它們實際上每次都保證不同)。如果客戶端平臺與服務器平臺不是二進制兼容的(例如,服務器在x64上運行,但客戶端是x86),則生成的可執行文件可能不起作用。另一個是安全性:通過黑客攻擊服務器或欺騙客戶端發送「錯誤」請求,攻擊者可能通過生成的可執行文件潛在地惡意代碼;如果這個應用程序幾乎都是超級微不足道的,我想這將是很難妥善保護這件事情。

0

可執行是可執行文件,並且由abiltity定義爲執行

不管什麼編程語言曾經一度用來編寫源代碼,這些源代碼被送到編譯器生成可執行文件,這不再重要。無論您使用哪種語言(或多種語言),可執行文件看起來都是相同的。 (.NET可執行文件只是一個可執行文件,具有一些相當複雜的DLL依賴關係)

所以沒有「C++可執行文件」這樣的東西。也許你的意思是一個不依賴.NET框架的可執行文件?

還是你只是說你有一個需要使用WCF服務的C++應用程序?

或者您想要將C#代碼重寫爲C++?