我遇到了導出COM對象的ATL服務的問題。它作爲本地服務運行,但作爲Windows服務運行時,我無法連接。該服務正確啓動並運行,但我的客戶端(代碼如下)總是失敗,並顯示錯誤「無法啓動服務」。客戶端不會與ATL服務通話
所以我們看着同樣的事情,我已經把一個最小的項目放在一起,這個項目將在我的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
客戶