У меня проблема с сервисом ATL, который экспортирует COM-объект. Он работает как локальная служба, но при работе в качестве службы Windows я не могу подключиться. Служба запускается правильно и работает, но мой клиент (код ниже) всегда дает сбой с ошибкой «Не удалось запустить службу».
Итак, мы смотрим на то же самое, я собрал минимальный проект, который воспроизведет эту проблему на моем ПК.
Файл-> Новый проект
Visual C ++ -> ATL "Проект ATL"
Название: "MyService"
В разделе «Настройки приложения» выберите «Служба (EXE)»
Перейти к «представлению класса»
Щелкните правой кнопкой мыши на «MyService» и выберите «Добавить» -> Class
выберите: «Простой объект ATL»
Краткое название: "MyObject"
Перейти к «Представлению решения»
Щелкните правой кнопкой мыши «Решение« MyService »и выберите« -> «Новый проект»
Это будет «Visual C ++» -> «Win32» «Приложение Win32 Console»
Название: "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
клиент