2009-01-20 53 views
0

我遇到了導出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
客戶

回答

1

你選擇的選項 「添加常用的頭文件:ATL」 在應用MyClient? 這一個在我的測試中工作正常。

將服務運行在您的用戶帳戶(默認爲系統帳戶),以便在調試IDE中進行訪問。

好鎖定。

0

有一個在ATL註冊表模板(一個錯誤的Visual Studio 2008/2010)。這個。爲組件RGS文件丟失一個AppID值,如this MSDN blog

描述添加以上以下行「類型庫...」在MyObject.rgs

val AppID = s '%APPID%'