2011-07-24 142 views
-2

我正在研究c#爬蟲/海報項目,它使用WebClient來抓取wordpress博客,站點以下載內容。在C#中使用vC++ dll#

Wordpress網站使用了一個錯誤,或者我不知道WebClient,由於某些原因它不接受來自WordPress的博客的所有cookie,這可能是一個措施來阻止汽車垃圾郵件發送者。所以我決定使用套接字,但似乎套接字也有一些問題,它有時不會返回完整的響應,所以不可靠,但我在VC++中發現了一個好的工作代碼,我試圖在C#中使用它,但我根本不知道vC++。

這裏是code

如何創建上面的代碼中的一個dll?

我已經使用vC++創建了一個簡單的dll項目,但是無法在項目中包含上述代碼。

更新鏈接Code

+0

您的代碼鏈接帶我到一個網站向我要求我的信用卡。也許Dropbox或Microsoft Skydrive將是一種更簡單的共享方式。 – selbie

+0

向下滾動顯示「慢速下載」,它會免費下載。 –

+0

對不起,1分鐘我把一個Skydrive鏈接,對不起再 –

回答

0

通過使用C++代碼創建一個類庫,並將其添加爲你的C#項目的引用。

+0

試過,給出了編譯錯誤,你可以試試這個代碼。 –

+0

正如我已經說過的,對vC++不太瞭解,請告訴我如何使用代碼以及id應該如何做,我下載它的原始鏈接是http://www.codeproject.com/KB/IP/asynchttp。 aspx –

+0

@downvoter:請您留下downvote的理由嗎? – CharithJ

0

您可以使用平臺調用,爲您需要的每個功能創建一個聲明。這裏的導入MessageBox WinAPI的函數的例子(注意,這是不一樣的。NET MessageBox類!)

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 
0

現在,我已經下載了你的代碼,我可以這樣說...

即使我們得到這段代碼進行編譯,我們仍然需要在C++和C#之間進行正常的互操作。代碼甚至沒有準備好。 http_download.h文件是一組很大的內聯類。從C#開始編寫C++代碼的指令在這裏列出的時間很長。你基本上必須得到這個代碼編譯爲一個DLL。然後從DLL中導出一組調用C++的「C」函數來執行你想要的操作。或者將這些C++類轉換爲帶有類型庫的COM對象。

但是,讓我們分析一下你真正想要做的事:

你要抓取的網頁,但是Web客戶端不能正常工作。

所以我想你想真正要問的問題:

爲什麼不WordPress的接受我與Web客戶端的cookie?

我真的不知道答案,因爲你沒有分享你的WebClient代碼或者詳細說明你認爲可能是什麼問題。但我敢打賭這是一個容易解決的問題。

我確定WebClient比一些C++代碼被黑掉成一個看上去不太漂亮的.h文件要容易10倍。這比使用純套接字(這是WebClient的功能,但它支持您需要但尚未實現的所有功能)來放置HTTP庫的時間要簡單100倍。

對不起,如果我很生氣。我試圖鼓勵你認爲這是一個更好的方式,而不是艱難的方式。