问题是这样的:
有很多类似的函数:
function InstanceMethod1(parameter1 : String ; parameter2:String ): String ;
function InstanceMethod2(parameter1 : String ; parameter2:String ): String ;
....
function InstanceMethodN(parameter1 : String ; parameter2:String ): String ;
(这些都是从DLL文件中导出的函数,参数个数,类型完全一样)现在想把这些函数整合归纳定义在一个函数中,然后通过某种标识能动态的调用这些函数。不知道有什么解决方法。意图:为了更方便的管理
有很多类似的函数:
function InstanceMethod1(parameter1 : String ; parameter2:String ): String ;
function InstanceMethod2(parameter1 : String ; parameter2:String ): String ;
....
function InstanceMethodN(parameter1 : String ; parameter2:String ): String ;
(这些都是从DLL文件中导出的函数,参数个数,类型完全一样)现在想把这些函数整合归纳定义在一个函数中,然后通过某种标识能动态的调用这些函数。不知道有什么解决方法。意图:为了更方便的管理
function InstanceMethod(mode:integer):String;stdcall;
begin
case n of
1:instanceMethod1(...);
2:......
end;
function DoInstanceMethod(strMethodName:String ; parameter1:string;parameter2:String) :string
begin
result := strMethodName(parameter1,parameter) ;
end ;因为这个DLL文件中可能有数百个函数,如果像上面的方法,那样也很麻烦。
function InstanceMethod(funname:string;parameter1 : String ; parameter2:String ): String ; var pfun:function (parameter1 : String ; parameter2:String ): String ;Begin
pFun:=GetProcAddress(dllhandle,FunName);
result:=pFun(parameter1,parameter2);
End;
function DoInstanceMethod(strMethodName: String; parameter1: string; parameter2: String):String;
type
TFunc = function (parameter1: String ; parameter2: String):String;Stdcall;
var
DllHandle: THandle;
Method: TFunc;
begin
DllHandle := LoadLibrary('你的Dll.dll');
try
if DllHandle <> 0 then
begin
@Method := GetProcAddress(DllHandle, PAnsiChar(strMethodName));
if Assigned(@Method) then
Method(parameter1, parameter2);
end
else exit;
finally
FreeLibrary(DllHandle);
end;
end;
首先声明函数类型type
TDLLFunction = function (parameter1 : String ; parameter2:String ): String ;
在定义的那个总结函数中
var
DllFunc:TDllFunction;
begin
首先LoadLibrary;
Result:='';
if 第一种情况 then
DllFunc:=GetProcAddress(LibHandle,'InstanceMethod1') //LibHandle是DLL句柄
else if 第二种情况 then
DllFunc:=GetProcAddress(LibHandle,'InstanceMethod2') ……
else
DllFunc:=GetProcAddress(LibHandle,'InstanceMethodN'); if not (@DllFunc=nil) then
Result:=DllFunc(parameter1,parameter2); 最后FreeLibrary;
end;不知道是不是这个意思?