关于ObjectARX中自定义对象的OPM代码细节

开发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‘

暂时保持原状即可

关于ObjectARX中自定义对象的OPM代码细节

时间: 2024-11-06 07:42:18

关于ObjectARX中自定义对象的OPM代码细节的相关文章

关于ObjectARX中自定义对象的OPM

关键字 ObjectARX,AutoCAD,自定义对象,OPM 在ObjectARX开发中,给自定义对象添加一个属性页面是个很有吸引力的事情, 学习路径如下, 1,学习ObjectARX的samples,其中AsdkSquareWrapper和polysamp 1.1研究AsdkSquareWrapper,这个例子相对简单,比较容易看懂, 弄清楚custent和 custentwrapper之间的关系,和一些固定的关系,和引用,哪些文件是中间生成等等,对没有COM编程经验的比较好: 但估计是制作

Java中自定义对象使用Collections工具类中的Sort方法

Collections工具类中的sort方法有两种形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一种方法中List类型的对象必须实现Comparable接口,此外,List中的元素必须可比较. 我们先定义类 package com.dongye.sort; import java.util.ArrayList; import java.util.Collection

集合框架(去除ArrayList集合中的重复自定义对象元素案例)

学生类 package cn.itcast_04; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public v

在Xcode中自定义代码块——快速代码

在Xcode中自定义自己的快速代码,很简单,用起来也很方便 首先选择自己想要的自定义的代码块 拖拽到红框的区域松手,会弹出设置窗口 这是我的填写 这里有另外一个技巧,可以给自己想要改变的地方设置成预留字(预留字是我自己随口胡邹的名词) 总之,如果你想把button的title设置成可变的,就在代码块中把 [button setTitle:@"button" forState:UIControlStateNormal]; 改为 [button setTitle:@"<#b

JavaScript中的内置对象(数组、Boolean、Number、字符串)和自定义对象

JS中常用的内置对象有:数组.Boolean类.Number类.字符串.下面分别介绍各自的常用方法 JS中的数组 1.数组的声明 ①字面量声明 直接使用[]声明数组: var arr=[1,2,"3",true,null,undefined]; 在JS中同一数组可以存放各种数据类型. ②使用new关键字声明:var arr = new Array(); 参数可以有三种形式: >>> 不传参数,表示创建一个长度为0的空数组: >>> 传入一个数值,表示

Untiy3D联网插件——Photon的自定义对象池使用方法

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/68068178 作者:cartzhang 一. 写在前面 最开始接触Photon的时候,没有怎么理解代码,我们自己的写的对象池与Photon结合使用起来非常不方便. 需要每次从池里取对象,然后手动设置ViewID,这样很烦人,从感觉来说,就是photon的打开方式不对. 直到有天再次耐心去读了Photon的代码才有发现,感觉是

JavaScript中创建自定义对象的方法

本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构体,结构体中有一些它的基本属性以及对结构体处理的方法,把它们封装起来称为一个整体.JS中所有的对象都是基于一个引用类型创建,这个引用类型可以是原生类型,如Array,Date等,也可以是开发人员自定义的类型. 下面主要总结下JS中创建对象的几种模式,分析他们各自的优缺点. 1. 工厂模式 /****

对NSArray中自定义的对象进行排序

本文译自How to sort NSArray with custom objects. 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个Friend类,点菜程序会有一个Recipe类等.有时候我们希望在程序中显示的列表数据是按照一定顺序进行排列的,本文我们就来看看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行

JS自定义对象,正则表达式,JQuery中的一些知识点

一:自定义对象 1.基本概念:①对象:包含一系列无序属性和方法的集合.②键值对:对象中的数据是以键值对的形式存在的,以键取值.③属性:描述对象特征的一系列变量.[对象中的变量]④方法:描述对象行为的一系列方法.[对象中的函数] 2. 对象的声明: ①字面量声明:var obj={}: ②new 关键字:var lisi = new Object(); 3.对象中属性和方法的读写方式: ①通过.运算符:对象内部:this.属性名 this.方法名(); 对象外部:对象名.属性名 对象名.方法名.