Com对象创建时不调用构造函数?(关于Com环境下的OO设计)(200分)

  • 主题发起人 主题发起人 东张西望
  • 开始时间 开始时间

东张西望

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建了一个Com对象,发现该对象创建时没有调用构造函数,只有调用析购函数,
如果这样,我如何初始化我的内部对象?另外,我刚学Midas,现在在试着把原来的一些
代码对象进行转换,发现在Midas下使用面向对象设计和编程非常别扭,限制很多,不知道
是不是我对Com的了解不够,翻遍论坛,没多少这方面的文章,请高手指点。
TACL = class(TTypedComObject, IACL)
protected
FList :TObjectList;

function IACL_Add(const AObject: IUnknown): HResult;
stdcall;
function isPriviledgeGranted(RequestedPriviledge_ID: Integer): WordBool;safecall;
public
destructor Destroy;override;
Constructor Create;
end;
constructor TACL.Create;
begin
FList := TObjectList.Create(True);
end;

destructor TACL.Destroy;
begin
FList.Free;
inherited;
end;
 
CoInitialize or OleInitialize
 
你是指在初始化的时候调用CoInitialize,就会调用构造函数吗?
 
不行啊,死活不会进入Create函数里。
 
重载 initialize 方法即可以呀!
 
的确可以,看来得把Create的操作放到initialize里。多谢denny521。
不过创建Com对象居然会绕过对象的构造函数!不可能吧?
还有,有没有什么方便的方法或者辅助工具可以把我原来定义的对象转化为
Com对象的定义?
 
恐怕不是绕过构造函数,而是在构造函数里调用Initialize,以它来作为COM对象的初始化
函数。因为各种语言的构造函数格式是不一样的,而语言无关性又是COM的一个重要待性,
所以这样设置,从而实现兼容性。(这是我猜的,我还没有仔细研过读相关资料对此问题
的论述)
 
问题是我在Create函数里设置了断点,根本就没有执行过。
 
看这问题对你有没有帮助:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1090763
 
这篇看过,影响不大。
 
这几天困扰的几个问题下午都试出来了,目前没什么问题,买单先。
 
后退
顶部