假设我的dll有一个类,我怎么导出她的属性呢type
  TTest=class
   public
        property Valid: Boolean read FValid write SetValid;
  end;我要怎么声明接口呢?下面的代码编译不过type
  ITest=interface
   ['{F4182F52-FBBC-4A65-8E8D-6F44951A9926}']
   property Valid: Boolean read FValid write SetValid;
  end;

解决方案 »

  1.   

    谢谢,不过因为一些原因,一定要做成DLL的
      

  2.   

    http://www.moon-soft.com/doc/6302.htm
    Dll中导出类--Delphi实战之一,参考一下
      

  3.   


    能这样使用
    VAR
     TEST:ITest;test.valid:=true;
      

  4.   

    type 
      ITest=interface 
      ['{F4182F52-FBBC-4A65-8E8D-6F44951A9926}']     function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
        function _AddRef: Integer; stdcall;
        function _Release: Integer; stdcall;
        property Valid: Boolean read FValid write SetValid; 
      end; 
     如果直接聲明接口
      

  5.   


    但是BPL的话就不能被别的语言调用了 
      

  6.   

    ?? 我的就是这样不行哦..  另外这个FVALID和SETVALID都是私有的,,怎么处理呢.. 
      

  7.   

    即為接口何為私有的?呵呵是這樣的接口有這個要求的,所有的數據成員都必須是 public如果你一定有私有,應該放在真正的實現部分,即繼承的類中。
      

  8.   

    http://topic.csdn.net/t/20030630/16/1974304.html
    看看这个对你有帮助吗
      

  9.   


    呵呵,可能我没有表达清楚... 其实我是想把类的属性也通过接口公开出来,然后能用以下的代码来存取
    VAR 
    TEST:ITest; test.valid:=true;
      

  10.   


      ITest = interface
        function ReadValid: Boolean;
        procedure WriteValid(Value: Boolean);
        property Valid: Boolean read ReadValid write WriteValid;
      end;
      

  11.   

    想要其它的语言也能调用就要写成COM;如果编译成普通dll就不能导出一个接口,同一个接口在Exe里面和dll里面具有不同的VMT表,当然不能通用了,就好像你用dll导出对象一样。可以写成一系列的函数,就像win SDK那样的,或者写成COM。如果随便声明一个接口就能导出用的话,M$也不会笨的搞那么复杂的COM了。
      

  12.   

    我要怎么声明接口呢?下面的代码编译不过type
      ITest=interface
      ['{F4182F52-FBBC-4A65-8E8D-6F44951A9926}']
      property Valid: Boolean read FValid write SetValid;
      end; 接口的要求是,不能使用私有域成员,不能使用成员变量,只能使用方法,方法默认是public类型的。
    因此15楼的声明是正确的。你只要能够取得他的类,你就能够获取他的属性了。