У меня проблема с службой ATL, которая экспортирует COM-объект. Он работает как локальная служба, но при работе в качестве службы Windows я не могу подключиться. Служба запускается правильно и запускается, но мой клиент (код ниже) всегда терпит неудачу с ошибкой «Не удалось запустить сервис».Клиент не будет разговаривать с службой ATL
Итак, мы смотрим на одно и то же, я собрал минимальный проект, который воспроизведет эту проблему на моем ПК.
File-> New Project
Visual C++ -> АТЛ "АТЛ Проект"
Название: "MyService"
В разделе Настройки приложения выберите "Сервис (EXE)"
Перейти к «Класс View "
правой кнопкой мыши на "MyService" и Add -> Class
выберите: "ATL Simple Object"
Краткое название: "MyObject"
Перейти к "Решение View"
правой кнопкой мыши "Solution 'MyService'" и Add -> "New Project"
Это будет "Visual C++" -> "Win32" "Win32 Console Приложеиние"
Имя: "MyClient"
Проверьте "Добавить общие файлы заголовков для АТЛ" окно
В 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/Сервис
чистый старт MyService
клиент