问题是这样的(怕说不清楚,写得很长了):已有系列函数:function AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer; Options: Integer;const CommandText: WideString; var Params: OleVariant; var OwnerData: OleVariant): OleVariant; 在另一个unit里有:function TF2.QueryByIntf(const sFuncName, sParam : string): string;
var
aExecFunc, vData : String;
begin
...
aExecFunc := 'TF1.'+sFuncName+'('+sParam +')';
vData := ???????? //如何才能执行 aExecFunc 这个串所描述的函数
self.cdsQuery.XMLData := vData;
...
end;使得类似如下调用aFuncName := 'AS_GetRecords';
aParamStr := 'dspQuery,-1,recNum,??1,sSQLCommand,??2,??3';
QueryByIntf(aFuncName,aParamStr);1.可以达到执行 TF1.AS_GetRecords(dspQuery,-1,recNum,??1,sSQLCommand,??2,??3);的目的。
2.上面AppServer函数如何调用? 特别调用参数中??1,??2,??3该怎么用?若两问题解决,本贴,下贴,需要的话再开几贴一起给分!
http://community.csdn.net/Expert/topic/3688/3688486.xml?temp=.5886804 [email protected]
var
aExecFunc, vData : String;
begin
...
aExecFunc := 'TF1.'+sFuncName+'('+sParam +')';
vData := ???????? //如何才能执行 aExecFunc 这个串所描述的函数
self.cdsQuery.XMLData := vData;
...
end;使得类似如下调用aFuncName := 'AS_GetRecords';
aParamStr := 'dspQuery,-1,recNum,??1,sSQLCommand,??2,??3';
QueryByIntf(aFuncName,aParamStr);1.可以达到执行 TF1.AS_GetRecords(dspQuery,-1,recNum,??1,sSQLCommand,??2,??3);的目的。
2.上面AppServer函数如何调用? 特别调用参数中??1,??2,??3该怎么用?若两问题解决,本贴,下贴,需要的话再开几贴一起给分!
http://community.csdn.net/Expert/topic/3688/3688486.xml?temp=.5886804 [email protected]
解决方案 »
- 关于程序在其他机器上运行的问题.
- Tolesyserror "没有注册类别"
- 如何锁定dbgrid不让选定的记录刷新掉???
- fastReport报表问题,如何固定主项数据行数?
- 请问谁有Programming MS IE 5这本电子书/?????!@?@@@@
- 关于串口通信,
- 100分求解:从TComponent派生出的组件里,如果我想实现类似于Application.ProcessMessages的功能,应该用什么函数?
- 紧急求助? 关于ORACLE下插入BLOB字段后不能提交的问题
- 怎么就是调不出来了?
- 大虾赶紧帮忙!
- 关于函数的两个难题,高手指点。
- 关于mpeg4压缩时出现问题,运行时提示Invalid floating point operation
你的TF1, TF2 是不是在同一個exe 中, 還是你在做 com, dcom 之類, AS_GetRecords 是一個在反台執行的???
Step: Integer; Progress: Integer); TEffect = record
Name: String;
Proc: TEffectProc;
end;procedure Effect001(Screen, Image: TBitmap; const Rect: TRect;
Step: Integer; Progress: Integer);
begin
...
end可以定义很多函数调用
PSEffects: array[1..2] of TEffect = ((Name: 'Expand from right';Proc: Effect001));这样调用
PSEffects[1].Proc(Media, Pic, R, Step, Progress);
当然也可以用Name得到Proc,也可以写个类来代替record或定义更多的信息,代码来自picshow组件,仅供参考.
剩下问题1了,大伙帮帮忙,我的意思是想把客户端要调用的函数进行分解,把需要调用的函数名称及参数进行包装,通过一个通用的函数传递到服务器端,在服务器端才调用它。 [ 把客户端函数A分解(函数A的名称,函数A的参数:string)当做形参,传递给服务器端的一个函数B,在函数B中重新合成函数A(即aExecFunc)并执行函数A。 ]
不用通用的函数传递,单在客户端调用函数A我也会,但因为要调用的函数类型不一又非常的多,所以想传给服务器,让它来调用。
感觉想完全这样操作要考虑的有点多,多个参数放一起,这样操作挺复杂
是不是还有分解这些数据才行呀。
执行哪个函数么?
如
if str=func1 then
result = func1(......)
else str=func2 then
result = func2(......)
.....
另外如果在服务器端可能函数还会不断增多,而不想升级客户和服务端程序的话,不妨
把函数写在dll中来调用,用函数名来识别dll文件,各dll内部结构用相同的。
不知道我的理解是不是理解骗了。
目前函数已有五六十个之多!
我下午在考虑一个和你类似的想法,就是用CASE,但是它不支持串,只支持有序数列(如数字),
于是想能不能定义个stringList的类型,把每个函数名存一行,在通过判断行数,得到行数,再用case
不知道行不行,弄不出来,高手指点一下.TO: whbo(王红波(决心找份工作))
谢谢提醒,我马上去查一下"delphi葵花宝典"各位高手出来指点一下呀,兄弟先谢啦!
1. 你服務端 用TList保存可能調用到的所有函數指針(意圖很明顯了吧)
當然 裡面得函數指針都已經被初始化為實際得函數
再用TStringList之類的保存所有函數的名稱(跟上面TList中的完全一致,這裡暫時不考慮函數重載之類的)
2. 當客戶端發送 'FuncA',那麼就直接 TStringList.IndexOf...直接獲得對應得下標 比如i
那麼 就直接 TList[i](argA,argB..) 因為TList裡面保存得就是函數指針 就直接用就是
3. 當然 解析規則你就自己定了 這樣吧 你可以定義一個結構
type CallRec = record
FuncName: string;
Args: array of string; // 只要傳值就可以了 類型不需要傳了 服務端知道
end;你再看看 我說得是不是你得意思。。
找过了,不是,那个是用形参传递函数类型,而不是函数名这样的一个串类型。TO: beyondtkl(大龙驹<*百善孝为先*>)
你说的正是我原来想的变通之道的方法,我试试。TO: fjx99(fjx99)
谢谢指点,不过还有些地方不大明白怎么用,我再看看。谢谢各位指点,相关不懂的再请教上面的各位。
其它走过路过的兄弟请继续支招。
你可以使用STRINGLIST或者在字段后面加上#0,进行字段分隔,这样在中间层就好分离了
是可以, 只是得不償失!