一个DLL,功能为查询在库商品,返回商品的ID,名称,生产厂家,数量,单价
供主程序使用。
请问这个DLL要怎样写?
请从下面修改DLL 中
  function getgoods():integer;
  begin
    goodsid:=2650;
    goodsname:='金士利';
    goodsfactname='天津金士利';
    goodsqty=560;
    goodsprice=7.2;
  result:=goodsid;
  end;主程序
  function getgoods():integer; external 'MyDLL.dll';  goodsid:=getgoods();
  goodsname:=????
  goodsprice:=????
我原来想把商品的名项属性用 @ 组合起来,返回一个PChar,在主程序中再拆分,可是那样是不是很麻烦?

解决方案 »

  1.   

    把你的东西写成一个类,dll接受一个类的指针不就可以了吗?
    Tgood
    {
      sid:Integer;
      ...
    }function getgoods(p):integer;
      begin
        p.goodsid:=2650;
        ...
      result:=p;
      end;
    没仔细调,大概就是这个思路吧
      

  2.   

    整个定义为一个结构体type
      Goods = record
      begin
       goodsid :integer;
       ...
      end;一般最好是在调用方负责分配内存 然后传入 
    我原来想把商品的名项属性用 @ 组合起来,返回一个PChar,在主程序中再拆分,可是那样是不是很麻烦?
    // 定义成统一的结构体后 直接获取就是 不麻烦
      

  3.   

    DLL 中
      function getgoods(var goodsid:integer;var goodsname, goodsfactname: pchar; goodsqty, goodsprice: float):boolean;
      

  4.   

    呵呵,我一向都是给予思路,什么东西都做好了对你来说有什么好处啊,建议你看看《delphi5/6 开发人员指南里怎么定义结构体RECORD就好了。
    其实如果你的字段不多,并且都是相对固定的话,按照aiirii(ari-爱的眼睛) 的做法是最简单的。把每个参数直接设为var,在DLL的函数里面直接给参数赋值,主程序就可以拿来用了。