从URL下载文件。使用LoadLibrary实现Dev C ++

时间:2015-01-12 15:12:06

标签: c++ urlmon

我正在尝试通过加载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轻松实现下载文件,请告诉我。 附:我不想使用第三方库实现此功能,更好的是使用套接字。

2 个答案:

答案 0 :(得分:0)

您已加入#include <urlmon.h>已声明URLDownloadToFileA您已使用typedef替换的内容。

将您的typedef更改为MyDownloadToUrl(以及相关的使用和演员)或类似内容,您将不会收到该错误。

e.g:

typedef int * (*MyDownloadToUrl)(void*,char*,char*,DWORD,void*);
HINSTANCE LibHnd = LoadLibrary("Urlmon.dll");
MyDownloadToUrl MyDownloadFunction =  (MyDownloadToUrl)GetProcAddress(LibHnd,"URLDownloadToFileA");
MyDownloadFunction(0, "http://", "filename", 0, 0);

答案 1 :(得分:0)

修复真正的问题:使用延迟加载,标记&#34; Urlmon.dll&#34;作为延迟加载的DLL,并像通常没有URLDownloadToFileA一样调用LoadLibrary

使用延迟加载的DLL,编译器将在幕后插入必要的LoadLibraryGetProcAddress调用,并在实际调用时{<1> }}