使用VC6.0開發COM組件 - 傻瓜式,不講理論,只講實例


1.創建一個ATL COM AppWizard工程,如圖:

2.  選擇 Dynamic link Library (DLL),其它兩個請百度,或參照其它文檔。如下圖:

3. 添加一個自己的COM類,用於導出需要用到的接口。步驟如下:

選擇類視圖->右鍵工程->新建類(New Class) 如下圖:

彈出對話框后,選擇 ATL CLASS,輸入類名,如下圖:

然后,在類視圖中,你會看到:

多了一個接口和一個類,這都是你剛才添加的。

4. 添加導出接口。

右鍵 "IHelloWorld"->AddMethod,如下圖:

彈出對話框,填寫函數名及參數即可,如下圖:

然后,我們再看 IHelloWord, 如下圖:

接口已經有了,而且它已經自動在  CHellowWorld 類中加了實現代碼,雙擊這個上圖中的選中的Show就會跳轉到定義,如下圖:

作為示例,我們彈出一個消息框好了,代碼如下:

STDMETHODIMP CHellowWorld::Show(int iWhat)
{
    // TODO: Add your implementation code here
    TCHAR szMsg [512] = {0};
    sprintf(szMsg, "Hello World - iWhat:%d", iWhat);
    MessageBox (NULL, szMsg, "First Com Project", MB_OK | MB_TOPMOST);
    return S_OK;
}

 



到這里,我們編譯生成一下。

5. 注冊COM組件,可以使用命令行進行注冊,regsrv32 xxx.dll,不過為了方便,我們不准備使用手工,我們可以在鏈接完成后直接注冊,設置工程,設置如下:

6.編寫調用例程。

創建一個控制台項目,項目源碼如下:

#include "stdafx.h"
#include "../ComDemo.h"
#include "../ComDemo_i.c"

int main(int argc, char* argv[])
{
    CoInitialize(NULL);
    IHellowWorld* pHello = NULL;
    IUnknown * pUnk = NULL;
    HRESULT hr;
    //(2)創建實例對象,獲取IUnknown接口指針
    hr = ::CoCreateInstance(
        CLSID_HellowWorld,
        NULL,
        CLSCTX_INPROC_SERVER,    // 以進程內組件 DLL 方式加載
        IID_IUnknown,            // 想取得 IUnknown 接口指針
        (LPVOID *) &pUnk);
    if( FAILED( hr ) )  
    {
        printf("沒注冊吧\n");
        return -1;
    }
    
    hr=pUnk->QueryInterface(IID_IHellowWorld,(LPVOID *)&pHello);
    if (FAILED (hr)) {
        printf("QueryInterface hello2 失敗\n");
        return -1;
    }
    pHello->Show (2);
    CoUninitialize();
    return 0;
}

其中的 ComDemo.h 和 ComDemo_i.c,請看一下COM組件的文件視圖,截圖如下:

然后運行一下就可以看到效果了。

 

參考資料:

http://hi.baidu.com/laocui172/item/c0bac2ab45e35f9e151073ae

http://xulin.blog.51cto.com/264387/84852


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM