问题描述
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);
我可以使用if-else或case来调用每个过程。但我想跳过一长串的if-else块。 在运行时,我的程序可以找到要调用的过程的名称。 因此可以通过传递其名称字符串和参数来调用所有函数。 像这样的样本:
type
loaderClass = class
public
procedure proceA(x : Integer); virtual; stdcall; abstract;
procedure proceA1(x : Integer); virtual; stdcall; abstract;
procedure proceB(y : Integer; name : PAnsiChar); virtual; stdcall; abstract;
procedure proceB1(y : Integer; name : PAnsiChar); virtual; stdcall; abstract;
procedure proceC(z : Integer; name : string); virtual; stdcall; abstract;
procedure proceC1(z : Integer; name : string); virtual; stdcall; abstract;
procedure proceD(d : Double; c : Char); virtual; stdcall; abstract;
procedure proceD1(d : Double; c : Char); virtual; stdcall; abstract;
.....
.....
.....
end;
解决方法
有不同的方法。
最好的IMO之一是用Delphi创建一个“自动化服务器”,以将您的代码放在一个外部文件中。这是Windows COM功能的一部分。请参见Microsoft网站上的Automation Servers和Automation Clients:自动化使您的应用程序可以操纵在另一个应用程序中实现的对象,或公开对象以便对其进行操纵。 >
一旦您的代码位于自动化服务器中,它就会自动进行自动描述,也就是说,调用方(在另一个应用程序中)可以发现所有方法,其参数,返回值并对其进行调用。
Delphi不仅具有创建自动化服务器和自动化客户端所需的功能,而且无需自己编写大量代码!
调用自动化服务器通常用于从Delphi程序中调用Office应用程序。
编写自动化服务器可以做相反的事情:让Microsoft Office或任何能够使用自动化服务器的应用程序(我刚才说过Delphi可以轻松做到)来调用自动化服务器中的方法。
很久以前,我写了有关这两个博客的文章:
- 自动化服务器:
http://francois-piette.blogspot.com/2013/01/microsoft-word-or-excel-calls-delphi.html - 自动化客户端:
http://francois-piette.blogspot.com/2013/01/automate-microsoft-office-from-delphi.html
这些博客文章使用Microsoft Office作为第二层,但是您当然可以在客户端和服务器端都安装Delphi。
如果已经编写了DLL,则可以将其封装在自动化服务器中,以利用这些功能。