2009-12-15 6 views
1

우리는 궁금 사용하는 방법의 HttpWebRequest와 HttpWebResponse 클래스 .NET ATL의 C 프레임 워크의 클래스 ++ 프로젝트를 C++에서 WebRequest 클래스 클래스에 노출 된 자신의 모든 인터페이스, 현재 우리는 우리가 찾고있는 교류 # 프로젝트를 가질 수 없습니다 대체 인터페이스.C++ 인터페이스의 HttpWebRequest의 버전 및 HttpWebResponse 클래스는

도움이 될 것입니다. Ramanand.

답변

3

당신은 다음과 같은 옵션을 사용할 수 있습니다

1) C#을 파일로 HttpWebRequest를 관리하는 코드를 작성하고, DLL로 컴파일합니다. RegAsm.exe를 사용하여 COM 개체로 등록하십시오. C/C++ 응용 프로그램의 COM 개체를 사용하십시오.

2) Michael이 위에서 제안한 것처럼 Managed C++을 사용하여 코드를 작성하고 C/C++ 코드의 다른 부분과 상호 작용/인터페이스합니다.

3) 관리 코드를 사용하지 마세요. 플랫폼 별 라이브러리 사용 - 예 : Microsoft의 WinHTTP은 잘 테스트되어 클라이언트 측 및 서버 측 작업 모두에 지원됩니다. Internet Explorer에서 사용하는 Wininet을 사용할 수도 있지만 중간 계층 시나리오에서는 사용하지 않는 것이 좋습니다.

Wininet/WinHTTP에서 사용할 수없는 System.Net 관리 코드 네임 스페이스에서 제공하는 것이 필요하지 않으면 관리 코드를 선택하지 않을 것입니다. 관리 코드는 메모리 및 CPU 오버 헤드를 가져 오며 실제로 수행하는 작업이 모두 웹 페이지를 다운로드하는 경우 필요하지 않습니다.

+0

업데이트 해 주셔서 감사합니다. WinHttp/Wininet 메서드를 사용하여 다운로드 할 수 있습니다. –

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(); 
관련 문제