0

当我将应用程序作为 Windoes 服务(即 TServiceApplication)运行时,我在使用 COM 对象时遇到问题。引发异常 EIntfCastError 'Interface not supported'。

如果我将应用程序作为普通的 Delphi 应用程序运行,那么它工作正常,包括如果我使用 srvany.exe 作为服务运行

type IMyInter = interface (IUnknown)
['{9E6B311E-C6D3-4687-B272-3FBE9DBC2DD6}']
//...
end;

type 
  TMyObject = class
  private
    FMyInter: IMyInter;
  published
    constructor Create(const ClassID: TGUID);
  end;

constructor TMyObject.Create(const ClassID:TGUID);
begin
  CoInitialize(nil);
  FMyInter := CreateComObject(ClassID) as IMyInter;  
  //.... 
end;

当结果将分配给 FMyInter 时,似乎在调用 CreateComObject 后引发了错误。应用程序和 COM 对象都是 32 位的。我在 Windows 7 64bit 上运行并使用 Delphi XE3。COM 对象已注册到 regsvr32.exe

任何帮助,将不胜感激

4

1 回答 1

2

我终于设法解决了驻留在 COM 服务器端的问题。创建对象时,即 TComObjectFactory.Create 我将线程模型从 tmSingle 更改为 tmApartment。然后我注销并重新注册了服务器。快!不太清楚为什么,但它对我有用。

...    
initialization
    TComObjectFactory.Create( ComServer, TMyComServerClass, Class_ComServerClassGUID, ‘My Com Server Class’, ‘My Descriptive text’, ciMultiInstance, tmApartment);
于 2013-05-08T11:14:35.497 回答