情况是这样的: 写这样一个MTSAutoObject:
1. 新建一个 ActiveX library: MyCOM.dll
2. 新建一个 Transaction Object:接口命名为 IMyBizImpl
此时,保存文件后,自动生成有
Inteface IMyBizImpl
coClass MyBizImpl
class TMyBizImpl = class(TMtsAutoObject, IMyBizImpl)我的需要是,这个TMyBizImpl还需要实现另外一个接口 IMyBiz, 其定义在另外一个类库MyBiz.dll中并且,需要从coClass层次修改,就是coClass MyBizImpl 实现了2个接口:IMyBizImpl 和 IMyBiz,并且设置 IMyBiz为默认接口。
如果只是在 实现单元修改 class TMyBizImpl为 class TMyBizImpl = class(TMtsAutoObject, IMyBizImpl, IMyBiz) 生成的MyCOM.dll安装后,看不到IMyBiz接口
Delphi6 中我没有找到导入(引用)外部类库的方式,那个Project/Import type library好像不是满足这种需求的...最终, 偶追求的 COM接口定义单元 应该是这样的 呵呵 :unit MYCom_TLB;// ************************************************************************ //
// Type Lib: D:\TestWork\MYCom.tlb (1)
// LIBID: {CBB5673A-3B5A-49A5-945A-529A4B0D38D2}
// LCID: 0
// Helpfile:
// DepndLst:
// (1) v2.0 stdole, (C:\WINNT\system32\Stdole2.tlb)
// (2) v1.1 MyBiz, (d:\TestWork\mybiz.dll)
// (3) v4.0 StdVCL, (C:\WINNT\system32\stdvcl40.dll)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interfaceuses Windows, ActiveX, Classes, Graphics, MYBIZ_TLB, StdVCL, Variants;
// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
MYComMajorVersion = 1;
MYComMinorVersion = 0; LIBID_MYCom: TGUID = '{CBB5673A-3B5A-49A5-945A-529A4B0D38D2}'; IID_IMyBizImpl: TGUID = '{FB7DFD75-20E3-428C-874F-586EED57FC9C}';
CLASS_MyBizImpl: TGUID = '{79EBC2F4-96A0-46FE-A028-CF9403B4D68F}';
type// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
IMyBizImpl = interface;
IMyBizImplDisp = dispinterface;// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
MyBizImpl = IMYBiz;
// *********************************************************************//
// Interface: IMyBizImpl
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {FB7DFD75-20E3-428C-874F-586EED57FC9C}
// *********************************************************************//
IMyBizImpl = interface(IDispatch)
['{FB7DFD75-20E3-428C-874F-586EED57FC9C}']
end;// *********************************************************************//
// DispIntf: IMyBizImplDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {FB7DFD75-20E3-428C-874F-586EED57FC9C}
// *********************************************************************//
IMyBizImplDisp = dispinterface
['{FB7DFD75-20E3-428C-874F-586EED57FC9C}']
end;// *********************************************************************//
// The Class CoMyBizImpl provides a Create and CreateRemote method to
// create instances of the default interface IMYBiz exposed by
// the CoClass MyBizImpl. The functions are intended to be used by
// clients wishing to automate the CoClass objects exposed by the
// server of this typelibrary.
// *********************************************************************//
CoMyBizImpl = class
class function Create: IMYBiz;
class function CreateRemote(const MachineName: string): IMYBiz;
end;implementationuses ComObj;class function CoMyBizImpl.Create: IMYBiz;
begin
Result := CreateComObject(CLASS_MyBizImpl) as IMYBiz;
end;class function CoMyBizImpl.CreateRemote(const MachineName: string): IMYBiz;
begin
Result := CreateRemoteComObject(MachineName, CLASS_MyBizImpl) as IMYBiz;
end;end. ps: 上面这些代码,是现有的(已离职的同事写的),所以是正确的,我想重新创建出来。 问题概括说,就是 COM+需要实现外部引入接口,并且设置该接口为默认接口,如何引入此外部类库.上
1. 新建一个 ActiveX library: MyCOM.dll
2. 新建一个 Transaction Object:接口命名为 IMyBizImpl
此时,保存文件后,自动生成有
Inteface IMyBizImpl
coClass MyBizImpl
class TMyBizImpl = class(TMtsAutoObject, IMyBizImpl)我的需要是,这个TMyBizImpl还需要实现另外一个接口 IMyBiz, 其定义在另外一个类库MyBiz.dll中并且,需要从coClass层次修改,就是coClass MyBizImpl 实现了2个接口:IMyBizImpl 和 IMyBiz,并且设置 IMyBiz为默认接口。
如果只是在 实现单元修改 class TMyBizImpl为 class TMyBizImpl = class(TMtsAutoObject, IMyBizImpl, IMyBiz) 生成的MyCOM.dll安装后,看不到IMyBiz接口
Delphi6 中我没有找到导入(引用)外部类库的方式,那个Project/Import type library好像不是满足这种需求的...最终, 偶追求的 COM接口定义单元 应该是这样的 呵呵 :unit MYCom_TLB;// ************************************************************************ //
// Type Lib: D:\TestWork\MYCom.tlb (1)
// LIBID: {CBB5673A-3B5A-49A5-945A-529A4B0D38D2}
// LCID: 0
// Helpfile:
// DepndLst:
// (1) v2.0 stdole, (C:\WINNT\system32\Stdole2.tlb)
// (2) v1.1 MyBiz, (d:\TestWork\mybiz.dll)
// (3) v4.0 StdVCL, (C:\WINNT\system32\stdvcl40.dll)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interfaceuses Windows, ActiveX, Classes, Graphics, MYBIZ_TLB, StdVCL, Variants;
// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
MYComMajorVersion = 1;
MYComMinorVersion = 0; LIBID_MYCom: TGUID = '{CBB5673A-3B5A-49A5-945A-529A4B0D38D2}'; IID_IMyBizImpl: TGUID = '{FB7DFD75-20E3-428C-874F-586EED57FC9C}';
CLASS_MyBizImpl: TGUID = '{79EBC2F4-96A0-46FE-A028-CF9403B4D68F}';
type// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
IMyBizImpl = interface;
IMyBizImplDisp = dispinterface;// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
MyBizImpl = IMYBiz;
// *********************************************************************//
// Interface: IMyBizImpl
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {FB7DFD75-20E3-428C-874F-586EED57FC9C}
// *********************************************************************//
IMyBizImpl = interface(IDispatch)
['{FB7DFD75-20E3-428C-874F-586EED57FC9C}']
end;// *********************************************************************//
// DispIntf: IMyBizImplDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {FB7DFD75-20E3-428C-874F-586EED57FC9C}
// *********************************************************************//
IMyBizImplDisp = dispinterface
['{FB7DFD75-20E3-428C-874F-586EED57FC9C}']
end;// *********************************************************************//
// The Class CoMyBizImpl provides a Create and CreateRemote method to
// create instances of the default interface IMYBiz exposed by
// the CoClass MyBizImpl. The functions are intended to be used by
// clients wishing to automate the CoClass objects exposed by the
// server of this typelibrary.
// *********************************************************************//
CoMyBizImpl = class
class function Create: IMYBiz;
class function CreateRemote(const MachineName: string): IMYBiz;
end;implementationuses ComObj;class function CoMyBizImpl.Create: IMYBiz;
begin
Result := CreateComObject(CLASS_MyBizImpl) as IMYBiz;
end;class function CoMyBizImpl.CreateRemote(const MachineName: string): IMYBiz;
begin
Result := CreateRemoteComObject(MachineName, CLASS_MyBizImpl) as IMYBiz;
end;end. ps: 上面这些代码,是现有的(已离职的同事写的),所以是正确的,我想重新创建出来。 问题概括说,就是 COM+需要实现外部引入接口,并且设置该接口为默认接口,如何引入此外部类库.上
解决方案 »
- Js 调用ActiveX接口返回值出错
- 请教大家:如何防止非法用户盗用企业管理软件?>。。
- 请教FastReport的使用问题!!
- TChart 是动态创建的 但增加大节点(3000,10)时出错,小节点(100,10)没错是什么原因
- ADOQuery访问dbf用DBGrid显示时出错。高分相送!
- 串口通讯问题:com1已被别的程序控制,请问如何做能实时得到com1接收的内容。
- 散分
- [转帖] 中国电信涨价 (经典笑文)
- 怎样调试activex?在线等待
- 请问高手:怎么样得到一个按钮被点击的相邻的间隔时间?
- QReport的问题???
- Ado多表更新的问题(散尽本就不多的分求问题解答~~~~~~~~~~~~~)
最近 好像类库除了 依赖类库(depndLst) 还有父类库(parent type library)这些Delphi6环境下如何设置的。
先导入入MyBiz.dll, 然后创建com对象时从接口中选择imybiz接口为默认接口
然后最后定义IMyBizImpl, 加入即可
这是我的想法, 没有实现,
不知是否可行?