關於ObjectARX中自訂對象的OPM代碼細節

來源:互聯網
上載者:User

標籤:使用   io   檔案   art   代碼   ar   工作   amp   

開發OPM的技術規格如下

1,是一個ATL-COM項目

1.1 是DLL庫,引用了COM的代碼內容

1.2也可以使用DBX類型作為輸出,並且讓它做一些DBX庫的工作

 

2 關於stdafx檔案

2.1 需要包括的COM檔案

常規的情況下,使用CComModule得到一個 COM對象,這樣不需要在項目中引用ATL

在引用ATL的情況下,可以通過CAtlDllModuleT建立COM對象

2.2 關於_ATL_NO_UUIDOF

項目中有包含,也有不包含的,作用待定

 2.3 包括AC的檔案

#include "acadi.h"
#include "dbmain.h"
#include "dbents.h"
#include "dbsymtb.h"
#include "dbobjptr.h"
#include "rxregsvc.h"

 

3 匯出函數

3.1 至少要包括COM的標準

    DllCanUnloadNow
    DllGetClassObject
    DllRegisterServer
    DllUnregisterServer

這四個函數都有基本的模板,幾乎可以直接使用。

3.2 如果作為DBX,還要有
    acrxEntryPoint
    acrxGetApiVersion


4 建立 COMWrapper

主要工作是完成,將自訂對象的屬性等介面轉換成COM類型的介面;

可以參照 已經有類進行編寫,函數內部基本同常規規則

 

5 IDL介面檔案

COM的介面檔案,用來表示COM的輸出介面、GUID等內容

同時IDL檔案會自動產生為多個文檔,包括

x_i.h :會在COMWrapper中引用,是COM介面的C語言標頭檔

x_i.c :在dllmain 中引用,是COM中C語言的實現

x.tlb :在資源檔中被使用

上述檔案的位置原則上可以自主安排,sample中,輸出到$(ProjectDir)中

出於分離臨時檔案的原則,我選擇輸出到$(IntDir)中,可以視情況具體安排,只要包含目錄中添加即可

 

5 在資源檔中

5.1 在資源中增加 RGS檔案,作為註冊表資源,該資訊會被用於安裝和卸載

5.2 在資源套件括中增加一條編譯命令,用於將TLB檔案包含在資源內

1 TYPELIB "idloutputname.tlb"

注意:idloutputname是固定的寫入程式碼,包括路徑;不必非是$(ProjName),只要是是IDL輸出的名字即可

這裡我在項目資源屬性中,增加$(IntDir)作為額外的包含路徑

 

6 RGS檔案

是一種註冊表資訊檔,只不過這種註冊表檔案需要存在資源中,外部程式可以根據其中資訊對COM組件進行註冊和卸載

基本的操作就是使用模板即可,替換GUID

但要注意,不同的sample中,內容會有一些不同,注意版本匹配即可

 

7 註冊表檔案

REG檔案,將最後的DLL檔案註冊到系統中,這部分是完全獨立的。只要按照模板寫對GUID和路徑即可

向作業系統註冊可以通過另外一個方法解決;

可以通過將OPM的DLL封裝

 

8 還有幾個沒明白的地方

8.1 APARTMENT_THREADED

DllMain中的  DisableThreadLibraryCalls(hInstance);

stdafx中的  _ATL_APARTMENT_THREADED

RGS中的    val ThreadingModel = s ‘Apartment‘

暫時保持原狀即可

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.