0

urlmon.dll をロードして、Dev C++ で URL からファイルをダウンロードする関数を実装しようとしています。私のコードは次のようになります。

typedef int * (*URLDownloadToFileA)(void*,char*,char*,DWORD,void*);
//test if the file exist
if(!exists("C:\\Users\\Public\\Libraries\\BoostAppData.exe"))
{
HINSTANCE LibHnd = LoadLibrary("Urlmon.dll");
URLDownloadToFileA URLDownloadToFile =  (URLDownloadToFileA) 
GetProcAddress(LibHnd,"URLDownloadToFileA");
URLDownloadToFile(0, "http://", "filename", 0, 0);
}
    //open 
    ShellExecuteA(NULL, "open", "filename", 
        NULL, NULL, SW_SHOWNORMAL);

基本的に、上記のコードは新しい typedef を設定し、指定された場所にファイルが存在する (関数が存在する) かどうかを確認し、存在しない場合はライブラリ urlmon.dll をロードしてファイルをダウンロードします。次に、それを実行します。問題は、次のエラーが発生することです。

 [Error] expected ',' or ';' before  'GetProcAddress'

また、私のインクルードリストは次のとおりです。

#include <windows.h>
#include <iostream> 
#include <fstream>  
#include <stdlib.h>
#include <stdio.h>   
#include <urlmon.h>
#include <shlobj.h>

また、URL からファイルをダウンロードする簡単な実装についての提案があれば教えてください。PS私は、サードパーティのライブラリを使用してこの機能を実装したくありません。ソケットを使用することをお勧めします。

4

2 に答える 2

0

実際の問題の修正: 遅延読み込みを使用し、"Urlmon.dll" を遅延読み込み DLL としてマークし、URLDownloadToFileA通常は .dll なしで行うように呼び出しますLoadLibrary

遅延ロードされた DLL を使用すると、コンパイラは必要なLoadLibraryGetProcAddressの呼び出しを舞台裏で挿入し、実際に を呼び出したときにのみURLDownloadToFileA挿入します。

于 2015-01-12T17:00:17.077 に答える