GZ, DELPHI中也要用指针参数。

解决方案 »

  1.   

    你是要这种效果吗?我对vc不熟
     private
        { Private declarations }
        procedure kk(k,l:string);overload;
        procedure kk(k:integer);overload;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure tform1.kk(k,l:string);
    begin
       showmessage(k+l);
    end;procedure tform1.kk(k:integer);
    begin
       showmessage(inttostr(k));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        kk('hello','hey');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        kk(9);
    end;
      

  2.   

    你是要这种效果吗?我对vc不熟
     private
        { Private declarations }
        procedure kk(k,l:string);overload;
        procedure kk(k:integer);overload;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure tform1.kk(k,l:string);
    begin
       showmessage(k+l);
    end;procedure tform1.kk(k:integer);
    begin
       showmessage(inttostr(k));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        kk('hello','hey');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        kk(9);
    end;
      

  3.   

    No.1 常量数组参数
    procedure f(m: array of const);
    No.2 变体类型
    procedure f(m: Variant);
    No.3 无类型参数
    procedure f(const m);
      

  4.   

    如下可以實現﹐用的是這几種﹕
    1.override
    2.開放數組//常量數組
    3﹑回調函數
    4.指針
      

  5.   

    没看明白你的意思,你难道要把所有的函数合在一起变成一个了吗?
    以后只要调用一个,MyDoAll,就可以实现所有的功能,呵呵,开个玩笑,能否说明白一点?
      

  6.   

    可变参数用Variantprocedure (ddd:Variant);
      

  7.   

    同意zswang(伴水)的,用variant会好一点。
      

  8.   

    不是不是,有无弄错,
    我以前是用TURBO C
    不是VC,那是C,不是C++,什么重载,只有宏
    不是问关于参数的设计
    而是就有这么一个函数,
    function myfunc():integer
    在一个DLL中
    主EXE中让他要这个样子
    myfunc(1,3)
    当然,在用之前 当然可以知道后面要加int,int了,
    但在EXE形成前不知道, LXJ2001(lxj) 说的有点那个意思
    就要这种效果!
      

  9.   

    对不起,DLL中也可以改变参数,
    但只有一个,
    而EXE中可能要有几个形式的函数形式,
    要DLL里的那个函数统统处理,假设有运行前,INI里有EXE要用的函数形式,DLL里又怎么写
    反正INI是可以改的,
    总不能改一次INI,就把DLL,和EXE都改了吧,大家明白我的意思了么??写得有点乱,没关系,慢慢谈,总会谈明白的
      

  10.   

    或者是这样一种情况,我前期写好了一个EXE文件,要动态LOAD DLL的,
    但后期 我的DLL文件要加几个函数,当然我得写一个INI式的说明,
    加的函数是什么样的,如int myfunc(int,int)
    或function myfunc(integer,integer):integer
    但这是后期加的,
    而我的EXE要对里面的函数动态地产生菜单
     
    点菜单就能使用后期改了之后的DLL里的函数,如做一个报表,等等,
    反正你爱怎么写就怎么写,
    我的前期EXE要求不变,
    也就是说,我的EXE里的调DLL函数的函数指针形式不能变,
    又要能调用不同的函数,嘿嘿,这回写的是不是有点明白呢,
      

  11.   

    type
      TMyFunc = function(Param1: Integer; Param2: PChar): DWORD; stdcall;var
      hDLL: THandle = 0;
      MyFunc: TMyFunc;function LoadFunc: Boolean;
    const
      DLLName = 'mydll.dll';
      FuncName = 'MyFuncName';
    begin
      Result := hDLL > HINSTANCE_ERROR;
      if Result then Exit;
      hDLL := LoadLibrary(DLLName);
      Result := hDLL > HINSTANCE_ERROR;
      if Result then
        MyFunc := GetProcAddress(hDLL, FuncName);
    end;procedure FreeDLL;
    begin
      if hDLL > HINSTANCE_ERROR then
      begin
        MyFunc := nil;
        FreeLibrary(hDLL);
      end;
      hDLL := 0;
    end;
      

  12.   

    我觉得你要做到不改EXE的东西,必须函数的参数和返回值不变。
    如果多了一个参数,难到EXE中不用多准备一个参数吗。
    DLL中肯定要改的,不然你怎么实现多加的函数了?
      

  13.   

    to copy_paste(木石三) 
    这就是一个一般的EXE动态LOAD 一个DLL的过程,
    而且还得要EXE中函数原形,和DLL中的的形式一样呢,不是么,和我的要求一点也不相干呀,
    to  LXJ2001(lxj) 
    当然可以,
    EXE可以完全不改,而DLL么,
    要是EXE真能做到这一点,那么,EXE找到一个固定的目录,找里面的DLL文件,做为插件,然后用里面的函数,不是一样么,
    只是由改DLL变为加了一个DLL而已呀上面的思想要是不可能的话,那么,MP3,photoshop....
    怎么都能做收后期加入插件呢,
    DELPHI本身的这种插件式思想就更好了,
    为什么我们的程序做不到这一点甚至我们可以把条件再紧一点,
    如DLL只能返回integer 和string
    不能用数组,只能用integer,string,double,的有限多个,
    因为这样,这个程序也已经很灵活了,不是么?
      

  14.   

    我举一个例子,
    你在EXE中有这个一个函数原形
    function myfunc(integer,integer):integer;
    而在DLL
    你只是有
    procedure myfuc1()
    {
    showmessage('hello world')
    }EXE竟能把DLL中这个函数调出来,并执行,!我想这是一种功能,不会是DELPHI的那个那个BUG吧,
      

  15.   

    **************
    请后面的朋友看这样一种情况:
    我想是题意思不太明白,你们看这个会清楚一些
    我前期写好了一个EXE文件,要动态LOAD DLL的,
    我把DLL做成EXE的许多插件,如计算类,报表类,
    就举这么一个例子吧,会计里面的有些数据算法就是要变的,
    而参数也可能变了,
    我有INI可以反应这种变化
    但程序已经发出去,并不能改动
    我要在一个目录下改一个DLL中的这个函数
    而返回值和参数可以变化
    而我的前期EXE也能正解把结果显示出来,
    是String的显示串,是数据的也变成inttostr()显示出来,
    也就是说,我的EXE里的调DLL函数的函数指针形式不能变,
    又要能调用不同的函数,嘿嘿,这回写的是不是有点明白呢,
      

  16.   

    **************
    请后面的朋友看这样一种情况:
    我想是题意思不太明白,你们看这个会清楚一些
    我前期写好了一个EXE文件,要动态LOAD DLL的,
    我把DLL做成EXE的许多插件,如计算类,报表类,
    就举这么一个例子吧,会计里面的有些数据算法就是要变的,
    而参数也可能变了,
    我有INI可以反应这种变化
    但程序已经发出去,并不能改动
    我要在一个目录下改一个DLL中的这个函数
    而返回值和参数可以变化
    而我的前期EXE也能正解把结果显示出来,
    是String的显示串,是数据的也变成inttostr()显示出来,
    也就是说,我的EXE里的调DLL函数的函数指针形式不能变,
    又要能调用不同的函数,嘿嘿,这回写的是不是有点明白呢
    ****************
      

  17.   

    你的意思是不是带有缺省值参数的函数?
    procedure DefValue(S:string;I:integer = 0);调用
    DefValue('Hello');
    Defvalue('Hello',3);
      

  18.   

    晕了,彻底晕了。DLL不支持Export变参函数。
    类似接口,一旦想改变函数名称,参数类型,个数,必须另外创建一个不同名称的函数Export并出去。
      

  19.   

    DLL不支持Export变参函数。
    类似接口,一旦想改变函数名称,参数类型,个数,必须另外创建一个不同名称的函数Export并出去。
    是呀,
    DLL是要这么做,
    但你的EXE可以做得更绝!
    从一个文件中得知改了的函数名的参数
    用一个一般的函数指什指向它,
    在里面再读文件,知道后面是什么参数,然后对参数进行处理,
    返回值,是串,返回串,
    是数也转成串嘛
      

  20.   

    to  eulb(执子之手,与子偕老
    当然不是,你那种不是正常情况么,
    而我说的不是,
    DLL里的参数比EXE的少,而不是多,但还能用,
    这和书上写的已经不一样了,
      

  21.   

    使用无类型参数
    function FunName(var Value):integer
    再去取地址啊,移动指针什么的!!!!!!!
      

  22.   

    在EXE和DLL中再增加一个DLL用于封装调用格式行不行,
    每次发布时发布两个DLL
      

  23.   

    你说的好象可以用于VC++的模板。但Delphi不支持,这也不是OO的思想。
      

  24.   

    to : qupd(qupd) (  ) 
    不行,那就等于,把程序做成两块,那一块专门 用于修改,
    不是我的意思>: steel1991(※随想曲※) 
    你要是这么喜欢分,我可以开一个灌水的贴(我的可用分好几千)>badsky(badsky) 
    用不用那些不是关键,但那些也解决不了问题,
    还不如ZSwang的办法好呢,用Variant>victorchen_2000(微力) ( 
    说详细一点,好不?
      

  25.   

    // 做一个处理函数,只能用汇编写
    procedure RunDllFunc;
    asm
       // 自己根据配置处理参数栈
       // ... ...   // 取到Dll中函数的地址
       // 把参数压栈
       // Call [函数]
       // 取出参数返回值   // ... ...
    end;这样你的问题不就解决了?
      

  26.   

    No.1 常量数组参数
    procedure f(m: array of const);
    No.2 变体类型
    procedure f(m: Variant);
    No.3 无类型参数
    procedure f(const m);你用 procedure f(m: array of Variant);试试
      

  27.   

    No.1 常量数组参数
    procedure f(m: array of const);
    No.2 变体类型
    procedure f(m: Variant);
    No.3 无类型参数
    procedure f(const m);你用 procedure f(m: array of Variant);试试
      

  28.   

    还是不行呀
    我在DLL里这样写
    function myfunc(a:integer;b:string;c:double):integer;stdcall;
    我在EXE里
    你们说我怎么写吧,
    fubction * mm(variant):integer;
    是么
    那我loadlibrary 成功后,
    GetProcAddress???
    我怎么用DLL的这个家伙??
    我也只能指向它呀,
    再就调用它了,
    我在什么时候把VAriant 分成
    m_var : variant;
    integer(m_var[0])
    ....
    ..
    这些我使不上劲呀再UP
      

  29.   

    回复人: kyee(浪子阿鹏) (  ) 信誉:100  2002-7-8 13:05:56  得分:0  
     
     
      // 做一个处理函数,只能用汇编写
    procedure RunDllFunc;
    asm
       // 自己根据配置处理参数栈
       // ... ...   // 取到Dll中函数的地址
    //这个好象没问题GetProcAddress
       // 把参数压栈,???,这要怎么做,
       // Call [函数]
       // 取出参数返回值   // ... ...
    end;这样你的问题不就解决了? 我对汇编不是很熟,是很不熟,望指点,
     
      

  30.   

    现在我看出这个问题很难了如果不限语言,不限方法 ,能不能解决这样的问题
    类,COM的COM+的你想用什么用什么,千万别说这个功能不能实现,
    因为我手上就有这么一个东东
    (如有思路的高手,我可以发一个例子,(用这个东东做一下)
    因为它能解释脚本,
    并最最最可怕的是,它的脚本里可以用你自己的函数)
    1.只要你写了DLL(一般的STDCALL)
    2.并写一个函数说明的INF文件,
    3.并在一个INI中指定这个文件,
    因为这是必须这是一个不太大的程序,也很老,工具条都不能动,
    不不不,是工具条都没有,上面只是几个BUTTON而已
    但就这个功能一下子让我惊讶了。
    太可怕了。
      

  31.   

    不信的朋友去
    http://vip.6to23.com/zgj67/他现在的版本可能有点问题,但你去论坛看看,和它的说明
    你写的DLL,它就能运行!