0

アプリケーションを TServiceApplication などの Windows サービスとして実行するときに、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 64 ビットで実行しており、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 に答える