2009-12-15 123 views
1

我們想知道如何在ATL C++項目中使用HttpWebRequest和HttpWebResponse.net框架類是他們的任何接口公開在C++中的webrequest類,目前我們不能有ac#項目,所以我們正在尋找替代界面。C++接口版本的HttpWebRequest和HttpWebResponse

任何幫助將不勝感激。拉曼達。

回答

3

您有以下選擇:

1)撰寫您管理的HttpWebRequest代碼到一個C#文件,並將其編譯爲一個DLL。使用RegAsm.exe將其註冊爲COM對象。使用C/C++應用程序中的COM對象。 2)正如Michael在上面提出的那樣,使用Managed C++編寫代碼,並與C/C++代碼的其他部分編寫interop/interface。

3)不要使用託管代碼!使用特定於平臺的庫 - 例如,來自Microsoft的WinHTTP已經過良好測試,並且支持客戶端和服務器端操作。您也可以使用Internet Explorer使用的Wininet,但不建議將其用於中間層場景。

因此,除非您真的需要System.Net託管代碼名稱空間提供的某些Wininet/WinHTTP上沒有的東西,否則我不會選擇託管代碼。如果你所做的只是下載網頁,託管代碼將帶來內存和cpu開銷,這實際上並不需要。

+0

真的感謝您的更新,我將使用WinHttp/Wininet方法來下載方法。 – 2009-12-16 06:15:05

1

您必須使用C++/CLI。代碼片段可能看起來像這樣。

// Open a connection 
System::Net::HttpWebRequest ^_HttpWebRequest = safe_cast<System::Net::HttpWebRequest^>(System::Net::HttpWebRequest::Create(_URL)); 

_HttpWebRequest->AllowWriteStreamBuffering = true; 

// You can specify additional header values: 
_HttpWebRequest->UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"; 
_HttpWebRequest->Referer = "http://www.google.com/"; 

// set timeout for 20 seconds (Optional) 
_HttpWebRequest->Timeout = 20000; 

// Request response: 
System::Net::WebResponse ^_WebResponse = _HttpWebRequest->GetResponse(); 

// Open data stream: 
System::IO::Stream ^_WebStream = _WebResponse->GetResponseStream(); 

// Do something with stream 
_tmpImage = Image::FromStream(_WebStream); 

// Cleanup 
_WebResponse->Close(); 
_WebResponse->Close(); 
相關問題