C++ 注册型插件移植为免注册插件

从Inventor 2012开始支持免注册插件,我在今年初做了一个专门的视频

前个月我在全球博客特别对C++注册型插件的移植注意事项做了总结。http://adndevblog.typepad.com/manufacturing/2012/10/notes-for-migrating-c-add-in-to-registry-free.html

假定你有C++注册型插件,移植将包含以下内容: 

1. 移除所有和注册相关的文件,例如 *.rgs。但需要注意,如果你的插件使用到了其它注册型的组件,则需要考虑预先注册好那些组件。我们这里所说的注册相关是Inventor插件本身。

 image

2. 去除注册相关的代码,尤其是

   - DllRegistryServer
   - DllUnregistryServer 

image

 

image

image

3. 移除编译后处理中插件注册的内容。

image

4. 确保工程设置中 “embed manifest” 是选上的。

image

5. 有些机器上,可能还需要禁止 UAC 

image

6. 添加对应的清单文件(manifest)和 *.addin文件。这里我提供了这两个文件的模板,修改其文件名为你的插件名,其中的部分内容例如GUID调整一下。

Download CPPSampleTest.X 
Download Autodesk.CPPSampleTest.Inventor    

image

7. 工程中加入清单文件

   image

 

8. 编辑清单文件 注意:C++的清单文件格式和.NET的插件不太一样. 除了GUID,还有几处信息是你的插件特有的。

- name: 工程名 
- file name: 编译好的dll文件名 

image

- clsid: 这可以在*.idl 文件中找到

image

- tlbid: 这也可在 *.idl 文件中找到

image

 修改后,是这个样子:

image 

9. 编辑 *.addin文件 

-ClassId 
-ClientId 
-DisplayName 
-Assembly:  dll的绝对或相对路径 
- 其它你需要的设置

image

 

10. 编译工程看看有无错误。接着拷贝*.addin文件到指定的文件夹,让Inventor能知道加载。本文我们放在%AppData%\Autodesk\ApplicationPlugins. 也可在编译后处理中作这个事情。 

image

 

11. 启动Inventor,看看插件是否加载正常。

image

12. 特别需要注意的: 

  1) 再次提醒,C++插件和.NET插件的清单文件格式不太一样。 格式不对会造成插件无法加载。
  2) Inventor 2013的插件模板创建的是免注册插件。其中有一步可规定RDS名,如果设置了,dll文件名将含有RDS名。但自动产生的清单文件里却忽略了RDS名,因此请注意将二者保持一致。

image

3) 缺省情况下,插件向导用IDispatch interfaces创建插件. 但这样的免注册插件无法在XP(无论32位还是64位)上加载正常。另外,如果调试,也会抛出异常。解决办法是用Vtable interfaces创建插件. 所以,如果你原有的插件用的是IDispatch interfaces, 需要转换为Vtable interfaces。假设不在XP上使用,可不做转换。 

image


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值