能否对函数名称method1加密解密呢?我是想调用时,调用加密后函数名称,通过解密,来调用method1.

解决方案 »

  1.   

    procedure a723fjfasdldldf;
    begin
      method1
    end;
    调用:
    a723fjfasdldldf;
      

  2.   

    解密后的函数名称为DCP_blowfish1.DecryptString('jLXOppOFoKY8Os1x'),解密后它变成string型,
    假设解密后变成method1怎样调用呢?
    var
    s:string;
    begin
    s:=DCP_blowfish1.DecryptString('jLXOppOFoKY8Os1x');
    s;
    end;
    这样调用又不行
      

  3.   

    你这个method1是类的一个方法吗?形如procedure TForm1.method1这样?
    如果是的话可以调用MethodAddress取得函数地址!
      

  4.   

    单层不带参数可以,
    但如果method1带参数,且在三层的中间层里,客户端能调用吗?怎样写
      

  5.   

    那客户端得把函数名称传给中间层,然后中间层调MethodAddress吧?
      

  6.   

    procedure callXX(string: 密匙);
    begin
      if (解密(密匙) = True) then method1;
    end;
      

  7.   

    不如加密参数,传入参数不正确就exit
      

  8.   

    首先你得类是要一个实例,当然如果有字符串。你可以使用GetClass来获得类,创建实例后,然后再使用ARunTime.MethodAddress( 'FUNNAME '),剩下的就可以了吧。如下。 
        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); 
     
    这个应该可以满足你的要求... 参考http://topic.csdn.net/t/20051210/11/4450510.html