COM オブジェクトをエクスポートする ATL サービスに問題があります。ローカル サービスとして実行すると動作しますが、Windows サービスとして実行すると接続できません。サービスは正しく開始して実行されますが、クライアント (以下のコード) は常に「サービスの開始に失敗しました」というエラーで失敗します。
同じことを見ているので、PCでこの問題を再現する最小限のプロジェクトをまとめました.
[ファイル] -> [新しいプロジェクト
Visual C++] -> ATL "ATL プロジェクト"
名前: "MyService"
[アプリケーションの設定] で、[サービス (EXE)] を選択します。
"クラス ビュー" に
移動し、"MyService" を右クリックして追加 -> クラス
を選択: "ATL シンプル オブジェクト"
短縮名: "MyObject"
「ソリューション ビュー」に移動し、「
ソリューション 'MyService'」を右クリックして追加 -> 「新しいプロジェクト」
これは「Visual C++」 -> 「Win32」 「Win32 コンソール アプリケーション」
名前: 「MyClient」
「追加」にチェックを入れますATL の共通ヘッダー ファイル」ボックス
client.cpp で、次のコードを使用します。
#include "stdafx.h"
#import "../MyService/Debug/MyService.tlb"
#include <iostream>
using namespace MyServiceLib;
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize( NULL );
try
{
IMyObjectPtr spQueue( __uuidof( MyObject ) );
}
catch( const _com_error& Err )
{
std::wcout << L"Error: " << Err.ErrorMessage() << std::endl;
}
catch( ... )
{
std::wcout << L"Unexpected Error" << std::endl;
}
::CoUninitialize();
std::wcout << L"Finished" << std::endl;
return 0;
}
「プロジェクトの依存関係」
プロジェクト「MyClient」は「MyService」に依存します
ソリューションをビルドします。
コマンド プロンプトから次のコマンドを実行します。
MyService /Service
net start MyService
クライアント