COM 개체를 내보내는 ATL 서비스에 문제가 있습니다. 로컬 서비스로 실행되지만 Windows 서비스로 실행될 때는 연결할 수 없습니다. 서비스가 올바르게 시작되고 실행되지만 내 클라이언트 (아래 코드)는 항상 "서비스를 시작하지 못했습니다."오류로 실패합니다.클라이언트가 ATL 서비스와 통신하지 않습니다.
우리는 똑같은 것을보고 있으며,이 문제를 내 PC에서 재현 할 수있는 최소한의 프로젝트를 작성했습니다.
파일 -> 새 프로젝트
비주얼 C++ -> ATL "ATL 프로젝트"
이름 : "이면 MyService"응용 프로그램 설정에서
선택 "서비스 (EXE)"
로 이동 "클래스보기 이면 MyService "
마우스 오른쪽 클릭" "및 추가 -> 클래스
선택 :"ATL 단순 개체 "
짧은 이름을"MyObject를 "
로 이동 "솔루션보기"
마우스 오른쪽 버튼으로 클릭 "솔루션 '이면 MyService'"를 추가 - 이것은 "비주얼 C++"입니다> "새 프로젝트"
을 -> "는 Win32" "Win32 콘솔 Applicaion"
이름 :
#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"
확인 client.cpp에서 "ATL에 대한 일반적인 헤더 파일을 추가"상자
,이 코드를 사용3210 프로젝트 "MyClient"는 "MyService"에 종속됩니다.
솔루션을 빌드하십시오. 명령 프롬프트에서
실행 다음 명령을
이면 MyService/서비스
순 시작이면 MyService
클라이언트