我想通过
Invoke('TMyClass','MyFunc',MyVariantArray);
来调用一个类的方法,并能通过它返回结果,其中MyVariantArray是方法使用的参数
Invoke('TMyClass','MyFunc',MyVariantArray);
来调用一个类的方法,并能通过它返回结果,其中MyVariantArray是方法使用的参数
解决方案 »
- 在vista操作系统下,运行一个Delphi程序在 查询数据库时报错: Network initialization failed.Permission denied. File:C:\PDOXUSRS.NET Directory:c:\.
- 请大家给推荐几本介绍pascal语言的书
- 关于控制多个控件的简单问题
- 自認為很難的問題,各位高手幫我想想!
- 报表打印问题??
- 你提供软件,我负责销售。寻优秀教育相关软件
- 关于BDE,ADO弱弱的问^_^b高手请进~~~~~
- 有关sql语句出现的问题?
- 使用报表打印,当数值字段为0时,怎样才能让其打印为“空”?
- 堆,栈,堆栈 有什么分别?
- 100分求一条SQL 语句,统计学生成绩的,在线等,搞定就给分了。22:00之前
- 请教:delphi软件实现点击WebBrowser中网页的座标(100分)
params: Variant);
var
Inv: TInterfaceInvoker;
Obj: TObject;
InvContext: TInvContext;
IntfMD: TIntfMetaData;
MethNum: Integer;
MD: TIntfMethEntry;
begin
MethNum := -1;
GetIntfMetaData(IntfInfo, IntfMD, True);
InvContext := TInvContext.Create;
if MethName <> '' then
MethNum := GetMethNum(IntfMD, MethName);
MD := IntfMD.MDA[MethNum];
InvContext.SetMethodInfo(MD);
InvContext.AllocServerData(MD); Obj := InvRegistry.GetInvokableObjectFromClass(AClass);
Inv := TInterfaceInvoker.Create;
Inv.Invoke(Obj, IntfMD, MethNum, InvContext);
end;
以上是一些从InvokeRegistry,OPToSOAPDomConv中截取的代码,但是向TInvContext中填入参数和取得返回值的代码,实在看不下去了,有点晦涩
如果你把自己的调用封装成一个soap规范的xml文档的化,是可以解决的,现在就是希望高手能把soap单元中的相关代码抽取出来,提供具有一般性的工具。
TPLUGMETHOD = procedure(FunctionID: Integer; ExecData: Pointer) of object;
ExecMethod: TMethod; //加载需要加载的接口
RunTimeClass:=GetClass(FInterFaceName);
if not Assigned(RunTimeClass) then
raise Exception.Create('无效的注册类:'+ InterFaceName);
ARunTime:=RunTimeClass.Create;
PExecMethodAddr:=ARunTime.MethodAddress('ExecFunction');
if PExecMethodAddr = nil then
raise Exception.Create('无效的接口方法'); ExecMethod.Data := ARunTime;
ExecMethod.Code := PExecMethodAddr;
//初始化接口
TPLUGMETHOD(ExecMethod)(0, nil);
我是想这样调用两个不同的方法
invoke('myclass1','method1',vararrayof([1,'test']);
同样我也可以
invoke('myclass2','method2',vararrayof([2,'test',now,34.21]);
可以有这样的一个invoke方法的实现吗?我可以接受都实现某个接口
支持stdcall,fastcall/register,cdecl,pascal
begin
Invoker:=TRegisterInvoker.Create(@TForm1.xxx);
Invoker.BindParams(['self','a','b','c','str']);
Invoker.Invoke([Form1,1,2,3,"ff"]);
ShowMessage(IntToStr(Invoker.GetReturn));
end;
type
TPLUGMETHOD1 = procedure(FunctionID: Integer; ExecData: Pointer) of object;
TPLUGMETHOD2 = procedure(FunctionID: Integer; ExecData: Pointer; ExecData: Pointer) of object;
我那个可以不需要进行参数绑定。BindParams可要可不要,呵呵
烦龙兄发来以瞻仰之
烦龙兄发来以瞻仰之