首页 > 其他分享 >delphiXE7异步WebAPI

delphiXE7异步WebAPI

时间:2023-11-03 15:15:05浏览次数:32  
标签:WebAPI 异步 begin end delphiXE7 xmlhttp TAjaxEvent Integer const

废话不多说 直接上源码:

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,msxml2_tlb, Vcl.StdCtrls,comobj;

type
TAjaxEvenFunc = procedure (d: Variant) of object;
TAjaxEvent = class(TInterfacedObject, IDispatch)
private
d: Variant;
func: TAjaxEvenFunc;
public
constructor Create(const d: Variant; const func: TAjaxEvenFunc);
destructor Destroy; override;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult: Pointer; ExcepInfo: Pointer;ArgErr: Pointer): HRESULT; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount: Integer;LocaleID: Integer; DispIDs: Pointer): HRESULT; stdcall;
function GetTypeInfo(Index: Integer; LocaleID: Integer;out TypeInfo): HRESULT; stdcall;
function GetTypeInfoCount(out Count: Integer): HRESULT; stdcall;
end;

type
TForm1 = class(TForm)
Button1: TButton;
m_result: TMemo;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure EventHandl(d: Variant);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
{ TAjaxEvent }

constructor TAjaxEvent.Create(const d: Variant;const func: TAjaxEvenFunc);
begin
inherited Create;
self.d := d;
self.func := func;
end;

destructor TAjaxEvent.Destroy;
begin
func := nil;
d := Null;
inherited;
end;

function TAjaxEvent.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount,
LocaleID: Integer; DispIDs: Pointer): HRESULT;
begin
Result := E_NOTIMPL;
end;

function TAjaxEvent.GetTypeInfo(Index, LocaleID: Integer;
out TypeInfo): HRESULT;
begin
Result := E_NOTIMPL;
end;

function TAjaxEvent.GetTypeInfoCount(out Count: Integer): HRESULT;
begin
Result := E_NOTIMPL;
end;

function TAjaxEvent.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT;
begin
Result:=0;
if DispID <> 0 then
begin
Result := E_INVALIDARG;
exit;
end;
if Assigned(func) and not VarIsNull(d) then
func(d);
end;

procedure TForm1.EventHandl(d: Variant);
begin
if (d.readyState = 4) and (d.status = 200) then
m_result.Lines.Text := d.responseText;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
xmlhttp: IXMLHTTPRequest;
begin
try
xmlhttp := CreateOleObject('MSXML2.XMLHttp.3.0') as IXMLHTTPRequest;
xmlhttp.Open('POST', Edit1.Text, false,EmptyParam, EmptyParam);
xmlhttp.setRequestHeader('Accept', 'application/json');
xmlhttp.setRequestHeader('Content-Type', 'application/json');
xmlhttp.onreadystatechange := TAjaxEvent.Create(xmlhttp, EventHandl) as IDispatch;
xmlhttp.send('');
xmlhttp := nil;
except
on e:Exception do
begin
ShowMessage('异常:'+e.Message);
end;
end;
end;

end.

标签:WebAPI,异步,begin,end,delphiXE7,xmlhttp,TAjaxEvent,Integer,const
From: https://www.cnblogs.com/530263009QQ/p/17807593.html

相关文章

  • Task异步多线程
    不废话,直接贴上代码...【1】直接实现多线程:`usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceTask异步多线程{classProgram{staticvoidMain(string[]args){......
  • Java 8: 异步利器 CompletableFuture vs Parallel Stream 选哪个
    应人们对性能和体验的要求,异步在项目中用的越来越多,CompletableFuture和ParallelStream无疑是异步并发的利器。既然两者都可以实现异步并发,那么带来一个问题:什么时候该使用哪个呢,哪个场景下使用哪个会更好呢?这篇文章因此出现,旨在当执行异步进行编程时CompletableFuture与Parall......
  • 模拟实现.net中的Task机制:探索异步编程的奥秘
    .net中使用Task可以方便地编写异步程序,为了更好地理解Task及其调度机制,接下来模拟Task的实现,目的是搞清楚:Task是什么Task是如何被调度的基本的Task模拟实现从最基本的Task用法开始Task.Run(Actionaction)这个命令的作用是将action作为一项任务提交给调度器,调度器会安排......
  • Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。本周刊精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进......
  • 带有最小间隔时间的队列读取实现 —— Python异步编程
     (注:照片源自免费网站,地址:https://www.freepik.com/photos/angry-panda/13)  ==================================================   ==================================================......
  • React学习笔记15-13-setState同步异步问题
    先说结论:setState处在同步的逻辑中会异步更新状态,更新真实dom。连续调用setState不会连续进行虚拟dom的对比和页面的更新setState处在异步的逻辑中,同步更新状态,更新真实dom。 1.同步状态先看同步状态/*eslint-disablereact/no-direct-mutation-state*/importRea......
  • webapi 注解调试工具swaggo 介绍和使用
    swaggo介绍和使用介绍Swag是一个开源项目,用于web框架下接口调试和文档管理,可以将代码中的接口注释转换为文档格式,并提供界面在线调试接口的功能。项目地址:https://github.com/swaggo/swag目前项目可以支持的web框架gin,echo,buffalo,net/http,gorilla/mux,go-chi/chi,flamingo,fi......
  • 在C#中能用异步来包装同步调用吗?
    我应该为同步方法公开异步包装器吗?对于这样的问题,我的简短回答是“不”。例如,考虑一个同步方法Sleep,它在N毫秒内不返回:publicvoidSleep(intmillisecondsTimeout){Thread.Sleep(millisecondsTimeout);}现在,考虑创建异步版本的需求,这样返回的Task在N毫秒内不会完成......
  • 一文详解 springboot 项目启动时异步执行初始化逻辑
    你知道的越多,你不知道的越多点赞再看,养成习惯文章目录前言代码实现定义异步处理工具类实现java线程池新建AppInit实现ApplicationRunner接口完成启动项目时异步数据初始化前言前面的工作中,为了提高地区数据的响应时间,需要加载全国区划数据到redis中缓存起来,这个过程希......
  • C# Webapi Filter 过滤器 - 生命周期钩子函数 - Exception Filter 基础
    什么是Filter?1.切面编程机制,在ASP.NETCore特定的位置执行我们自定义的代码;2.ASP.NETCore中的Filter五种类型,Authorization,filter,resourcefilter,actionfilter,exceptionfitler,resultfilter;3.所有的筛选器都有异步和同步两种版本;eg:IActionFilter,IAsyncActionF......