回答
我只能猜測什麼是你想要的,但我相信你的要求是這樣的:
- 您的服務器上運行的WCF服務的地方。
- 在收到某個調用後,服務必須根據它接收到的參數輸出(二進制)可執行文件。
- 應該使用C++作爲中間語言。
讓我們看看你需要什麼。明顯的第一個要求是可以通過編程方式調用的C++編譯器/鏈接器。在Unix系統上,這將是g ++,你可以簡單地通過shell調出來調用它;在Windows上,g ++也是可用的(名字爲MinGW),但是版本相當過時,所以使用微軟的命令行C++編譯器可能會更好。
顯然,您還需要在某處生成C++源代碼;我假設每個請求的大部分源代碼都差不多,所以你可能需要某種模板系統。如果它不是太複雜,這可以像對一堆模板文件運行正則表達式搜索和替換一樣簡單;否則,您需要一個適當的模板語言(XSLT內置於.NET中,儘管語法需要一些習慣)。
然後膠水使它一起工作;我建議是這樣的:
- 讀取請求,並創建一個合適的數據結構(在格式模板引擎可以消耗)
- 將數據傳遞給模板引擎,輸出文件寫入到一個臨時文件夾
- 調用編譯器的臨時位置
- 讀取可執行回來,將其發送到客戶端
- 刪除臨時文件夾
由於編譯通常是一個代價高昂的操作,因此請考慮緩存生成的可執行文件(除非它們實際上每次都保證不同)。如果客戶端平臺與服務器平臺不是二進制兼容的(例如,服務器在x64上運行,但客戶端是x86),則生成的可執行文件可能不起作用。另一個是安全性:通過黑客攻擊服務器或欺騙客戶端發送「錯誤」請求,攻擊者可能通過生成的可執行文件潛在地惡意代碼;如果這個應用程序幾乎都是超級微不足道的,我想這將是很難妥善保護這件事情。
可執行是可執行文件,並且由abiltity定義爲執行。
不管什麼編程語言曾經一度用來編寫源代碼,這些源代碼被送到編譯器生成可執行文件,這不再重要。無論您使用哪種語言(或多種語言),可執行文件看起來都是相同的。 (.NET可執行文件只是一個可執行文件,具有一些相當複雜的DLL依賴關係)
所以沒有「C++可執行文件」這樣的東西。也許你的意思是一個不依賴.NET框架的可執行文件?
還是你只是說你有一個需要使用WCF服務的C++應用程序?
或者您想要將C#代碼重寫爲C++?
你的意思是你想將c#編譯爲本機機器碼嗎?在這種情況下,NGEN可能會有一些使用
http://msdn.microsoft.com/en-us/library/6t9t5wcf%28v=vs.80%29.aspx
- 1. C++可執行文件生成器
- 2. 使Eclipse生成C++可執行文件
- 3. C程序可以在與生成相同的生成文件中執行嗎?
- 4. 生成從可執行文件調用的C++方法列表
- 5. 如何從C程序(使用winapi)調用可執行文件?
- 6. 從C#執行excel應用程序
- 7. 應用程序可執行文件路徑C#
- 8. 無法從C++程序調用可執行文件
- 9. 如何從批處理文件執行c#console應用程序
- 10. 從Ruby程序生成可執行文件
- 11. 從JAVA調用C++可執行文件
- 12. 從Matlab運行C可執行文件
- 13. 生成安裝程序可執行文件後添加文件
- 14. 從C#可執行文件啓動Windows 10商店應用程序
- 15. visual studio從C#生成可執行文件,但obj文件在哪裏?
- 16. 文件可執行文件時,從其他應用程序
- 17. 將C++ ATL可執行應用程序從VS2003遷移到VS2013
- 18. 從PHP執行C程序
- 19. 從C#程序執行BatchFile
- 20. c#並行執行應用程序
- 21. C#遠程應用程序執行
- 22. 在C++程序中生成pcapng文件
- 23. 從可執行文件調用的C#程序集中訪問App.Config文件
- 24. 如何從另一個Qt程序執行分離的C++可執行文件?
- 25. 是C#程序集文件的可執行文件嗎?
- 26. 使用wix生成可執行文件
- 27. 如何從C++程序執行c#exe
- 28. C#可執行文件執行目錄
- 29. 使用Apache/FastCGI生成多個C可執行進程
- 30. 從應用程序運行exe可執行文件與系統
什麼事情* C++可執行*是什麼意思?你想從一個WCF服務中將一些C++源代碼編譯成一個可執行文件? – 2011-06-14 08:32:50
使用所有的本地接口來告訴g ++(或其他)來編譯程序嗎? – Tim 2011-06-14 08:33:21
什麼?!你能澄清更好嗎?如果你確實需要一個C++可執行文件,我想你可以使用編譯器服務並在內存或磁盤頭文件和cpp文件中創建它們,並將它們編譯成一個exe文件,最終你會得到託管的.NET C++可執行文件......這是你真的需要什麼? – 2011-06-14 08:34:21