C++接口注意

  1. 用Record接口,要注意 Packed的区别

2.cdeclstdcall的区别

  1. C++导出的函数建议用C格式stdcall导出,使用Def文件定义名称

4. 用VS写的API dll要注意是否引用了MFC的DLL,否则会使LoadLibrary失败,并GetLastError后返回14001
C++接口注意C++接口注意Api头文件//////////////////// 代理信息结构//////////////////////////////////////////

structDOWNLOAD_PROXY_INFO

{

intm_type;//代理服务器类型,0:HTTP; 1:SOCKS4; 2:SOCKS4a

charm_host[32];//代理服务器地址

intm_port;//代理服务器端口

charm_userName[52];//代理服务器验证用户名称

charm_password[52];//代理服务器验证用户密码

};

//////////////////// 任务节点结构//////////////////////////////////////////

structTASK_NODE

{

intm_id;//任务id

charm_url[1024];//目标URL,不能为空

charm_path[256];//存储目录,不能为空

boolm_isReload;//是否重新下载,用于断点续传

charm_fileName[32];//另存名称,可以为空,为空文件名同下载的文件名

charm_comments[1024];//下载注释,可以为空

intm_startMode;//开始模式,0手工开始,1立即开始

intm_threadCount;//下载线程数

intm_failedRetryCount;//失败重试次数

intm_failedRetryInterval;//失败重试间隔,毫秒

};

//////////////////// 回调函数指针//////////////////////////////////////////

typedefvoid(WINAPICALL_BACK)(inttaskID, TASK_INFOpTaskInfo);





//////////////////// 接口函数//////////////////////////////////////////

/

1.初始化函数

参数: maxFlow:流量的最大值,单位K/S。范围0<maxFlow<1024

pCallback:回调函数,格式见下CallBackFunction

isUseProxy:是否使用代理,false:不使用用;true:使用。默认不使用

pProxyInfo:代理类型结构指针,其结构见DOWNLOAD_PROXY_INFO,默认空

返回值: -1:初始化失败;其他值为使用者的ownerID

注意事项: 此函数必须首先调用

/

HDL_EXTERN
intHDL_EXPORTS WINAPI DownLoadInitial(intmaxFlow, CALL_BACK pCallback,boolisUseProxy=false, DOWNLOAD_PROXY_INFOpProxyInfo=NULL);



/


2.设置最大流量函数

参数: ownerID:使用者ID

maxFlowNum:新设置的最大流量值。范围0<maxFlow<1024

返回值: -1:失败;1:成功C++接口注意C++接口注意接口引用type

TTAQEXPProxy
=record

m_
type: Integer;

m_host:
array[0..31]ofchar;

m_port: Integer;

m_userName:
array[0..51]ofchar;

m_password:
array[0..51]ofchar;

m_domain:
array[0..51]ofchar;

end;

PTAQEXPProxy
=^TTAQEXPProxy;

TTAQEXPTASK_NODE
=record

m_id: integer;

m_url:
array[0..1023]ofchar;

m_path:
array[0..255]ofchar;

m_isReload: Boolean;

m_fileName:
array[0..31]ofchar;

m_comments:
array[0..1023]ofchar;

m_startMode: integer;

m_threadCount: integer;

m_failedRetryCount: integer;

m_failedRetryInterval: integer;

end;

PTAQEXPTask_Node
=^TTAQEXPTASK_NODE;



TTAQEXPDLLCALLBACK
=procedure(ID: integer; Data: PTAQEXPTask_INFO);stdcall;

TDownLoadInitial
=function(Amaxflow: integer; ACallBack: Pointer;

POwnerName: pchar; AUserProxy: Bool; AProxy: PTAQEXPProxy; LogLevel: integer): Integer;
stdcall;



procedureDoCallBack(ID: integer; Data: PTAQEXPTask_INFO);stdcall;

begin

TTAQEXPManager.GetInstance.DoUpdatePercent(ID,Data);

end;



procedureTTAQEXPDownloader.InitDll;

var

LInit: TDownLoadInitial;

LProxy: PTAQEXPProxy;

LMAX: Integer;



begin

ifnotFstateFlagthenExit;

new(LProxy);

fillchar(LProxy^,sizeof(TTAQEXPProxy),
0);

LInit :
=TDownLoadInitial(

GetProcAddress(FDllHandle, PChar(
'DownLoadInitial')));

ifAssigned(LInit)then

begin

ifTTAQEXPManager.GetInstance.Config.Loadedthen

LMAX :
=TTAQEXPManager.GetInstance.Config.FlowMax

else

LMax :
=128;

ifLMAX<1thenLMAX :=128;

ifCreateConfig.ProxyEnablethen

begin

caseCreateConfig.ProxySocksVersionof

svSocks4:

LProxy^.m_
type:=1;

svSocks4A:

LProxy^.m_
type:=2;

else

LProxy^.m_
type:=0;

end;

strpcopy(LProxy^.m_host, CreateConfig.ProxyHost);

LProxy^.m_port :
=strtointdef(CreateConfig.ProxyPort,80);

strpCopy(LProxy^.m_userName, CreateConfig.AuthUsername);

strpCopy(LProxy^.m_password, CreateConfig.AuthPassword);

strpCopy(LProxy^.m_domain, CreateConfig.AuthDomain);

FOwnerId :
=LInit(LMAX, @DoCallBack,pchar(ConConfigName), True, LProxy,0);

end

else

FOwnerId :
=LInit(LMAX, @DoCallBack,pchar(ConConfigName), false, LProxy,0);

ifFOwnerId=-1then

begin

FstateFlag :
=False;

DoLog(
'DownLoadInitial失败');

end;

end

else

begin

FstateFlag :
=False;

Dolog(
'没有函数:DownLoadInitial');

end;

end;

原文链接: https://www.cnblogs.com/enli/archive/2010/08/30/1812748.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14472

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午2:06
下一篇 2023年2月7日 下午2:08

相关推荐