请教,怎么导出类里的属性呢?

panxiaosen 2009-02-27 02:25:43
假设我的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;
...全文
221 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
火龙岛主 2009-02-28
  • 打赏
  • 举报
回复
我要怎么声明接口呢?下面的代码编译不过

type
ITest=interface
['{F4182F52-FBBC-4A65-8E8D-6F44951A9926}']
property Valid: Boolean read FValid write SetValid;
end;

接口的要求是,不能使用私有域成员,不能使用成员变量,只能使用方法,方法默认是public类型的。
因此15楼的声明是正确的。

你只要能够取得他的类,你就能够获取他的属性了。
xiaohongna 2009-02-27
  • 打赏
  • 举报
回复
想要其它的语言也能调用就要写成COM;

如果编译成普通dll就不能导出一个接口,同一个接口在Exe里面和dll里面具有不同的VMT表,当然不能通用了,就好像你用dll导出对象一样。

可以写成一系列的函数,就像win SDK那样的,或者写成COM。

如果随便声明一个接口就能导出用的话,M$也不会笨的搞那么复杂的COM了。
Seamour 2009-02-27
  • 打赏
  • 举报
回复

ITest = interface
function ReadValid: Boolean;
procedure WriteValid(Value: Boolean);
property Valid: Boolean read ReadValid write WriteValid;
end;
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 starluck 的回复:]


即為接口何為私有的?呵呵

是這樣的接口有這個要求的,所有的數據成員都必須是 public

如果你一定有私有,應該放在真正的實現部分,即繼承的類中。
[/Quote]

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

test.valid:=true;
Seamour 2009-02-27
  • 打赏
  • 举报
回复
做成com得了,折腾死了
bdmh 2009-02-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20030630/16/1974304.html
看看这个对你有帮助吗
starluck 2009-02-27
  • 打赏
  • 举报
回复


即為接口何為私有的?呵呵

是這樣的接口有這個要求的,所有的數據成員都必須是 public

如果你一定有私有,應該放在真正的實現部分,即繼承的類中。
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 starluck 的回复:]
Delphi(Pascal) code

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;






如果直接聲明接口
[/Quote]


?? 我的就是这样不行哦.. 另外这个FVALID和SETVALID都是私有的,,怎么处理呢..
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Seamour 的回复:]
bpl就是一种dll啊
[/Quote]

但是BPL的话就不能被别的语言调用了
starluck 2009-02-27
  • 打赏
  • 举报
回复


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;




如果直接聲明接口
Seamour 2009-02-27
  • 打赏
  • 举报
回复
bpl就是一种dll啊
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bdmh 的回复:]
你想达到怎样的效果呢
[/Quote]

能这样使用
VAR
TEST:ITest;

test.valid:=true;
bdmh 2009-02-27
  • 打赏
  • 举报
回复
你想达到怎样的效果呢
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
http://www.moon-soft.com/doc/6302.htm
Dll中导出类--Delphi实战之一,参考一下
[/Quote]

嗯 这篇帖子看过,不过不能解决我的问题.
bdmh 2009-02-27
  • 打赏
  • 举报
回复
http://www.moon-soft.com/doc/6302.htm
Dll中导出类--Delphi实战之一,参考一下
panxiaosen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Seamour 的回复:]
做成bpl,不要做dll
[/Quote]
谢谢,不过因为一些原因,一定要做成DLL的
Seamour 2009-02-27
  • 打赏
  • 举报
回复
做成bpl,不要做dll

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧