1
var
A: OleVariant;
begin
A := VarArrayCreate([0, 4], varVariant);
A[0] := 1;
A[1] := 1234.5678;
A[2] := 'Hello world';
A[3] := True;
A[4] := VarArrayOf([1, 10, 100, 1000]);
WriteLn(A[2]); { Hello world }
WriteLn(A[4][2]); { 100 }end;2
绝对不允许在事件中释放自己。因为Event执行完毕后,还需要执行一部分自己的代码。如果释放了自己,那么剩下的代码全部都变成了非法的内存空间。
var
A: OleVariant;
begin
A := VarArrayCreate([0, 4], varVariant);
A[0] := 1;
A[1] := 1234.5678;
A[2] := 'Hello world';
A[3] := True;
A[4] := VarArrayOf([1, 10, 100, 1000]);
WriteLn(A[2]); { Hello world }
WriteLn(A[4][2]); { 100 }end;2
绝对不允许在事件中释放自己。因为Event执行完毕后,还需要执行一部分自己的代码。如果释放了自己,那么剩下的代码全部都变成了非法的内存空间。
VType: Word;
Reserved1, Reserved2, Reserved3: Word;
case Integer of
varSmallint: (VSmallint: Smallint);
varInteger: (VInteger: Integer);
varSingle: (VSingle: Single);
varDouble: (VDouble: Double);
varCurrency: (VCurrency: Currency);
varDate: (VDate: Double);
varOleStr: (VOleStr: PWideChar);
varDispatch: (VDispatch: Pointer);
varError: (VError: LongWord);
varBoolean: (VBoolean: WordBool);
varUnknown: (VUnknown: Pointer);
varByte: (VByte: Byte);
varString: (VString: Pointer);
varAny: (VAny: Pointer);
varArray: (VArray: PVarArray);
varByRef: (VPointer: Pointer);
end;
2》有否变通方法?请教!
2)不要在事件内部释放,在外部释放。可以在事件中对某个标志置位。这样外部程序发现该标志,就释放这个对象。
2.我想在ActiveX中实现授权,无论运行时设计时,访问ActiveX,一旦ActiveX初始化时未发现注册信息便退出,VB中设计时用SendKey({DEL})达到效果,但我想,可否在ActiveX中自己实现呢?
2、我想,你可以考虑使用Unit中的initializtion和finalization两个区域。
2>暂时未试,等会儿!
仔细想一想,如何将一个树存入数据库中?
如果是这样,我倒了
2,无论那个区域,最终问题在如何安全的卸载自己,我在initializtion中对Create作条件判断,不满足条件不Create,在VB中会提示未注册类,所以,可否具体介绍一下?
2、卸载可以在finalization中做。未注册类是因为你的COM对象,没有用regsvr32注册。
2.我是要在加载ActiveX之前阻止加载,到了finalization黄花菜都凉了
我试过了,我在VB中调试“在initializtion中写Application.Terminate,最直接彻底”,
彻底到完全关闭VB,喔喔!
不能释放自己,而且又无法获得自己的实例,确实头痛。那么在试试在建构函数中引发例外,不让建构函数顺利执行,会不会迫使应用程序卸载ActiveX,如果这招都没用,我就没辙了。
好像Delphi只向用户开放OnCreate事件,你是说我修改VCL?
constructor Create(AOwner:TComponent); override;
ActiveX不会引起VB出错,但VB中不能正常显示异常