从Inventor 2012开始支持免注册插件,我在今年初做了一个专门的视频。
前个月我在全球博客特别对C++注册型插件的移植注意事项做了总结。http://adndevblog.typepad.com/manufacturing/2012/10/notes-for-migrating-c-add-in-to-registry-free.html
假定你有C++注册型插件,移植将包含以下内容:
1. 移除所有和注册相关的文件,例如 *.rgs。但需要注意,如果你的插件使用到了其它注册型的组件,则需要考虑预先注册好那些组件。我们这里所说的注册相关是Inventor插件本身。
2. 去除注册相关的代码,尤其是
- DllRegistryServer
- DllUnregistryServer
3. 移除编译后处理中插件注册的内容。
4. 确保工程设置中 “embed manifest” 是选上的。
5. 有些机器上,可能还需要禁止 UAC
6. 添加对应的清单文件(manifest)和 *.addin文件。这里我提供了这两个文件的模板,修改其文件名为你的插件名,其中的部分内容例如GUID调整一下。
Download CPPSampleTest.X
Download Autodesk.CPPSampleTest.Inventor
7. 工程中加入清单文件
8. 编辑清单文件 注意:C++的清单文件格式和.NET的插件不太一样. 除了GUID,还有几处信息是你的插件特有的。
- name: 工程名
- file name: 编译好的dll文件名
- tlbid: 这也可在 *.idl 文件中找到
修改后,是这个样子:
9. 编辑 *.addin文件
-ClassId
-ClientId
-DisplayName
-Assembly: dll的绝对或相对路径
- 其它你需要的设置
10. 编译工程看看有无错误。接着拷贝*.addin文件到指定的文件夹,让Inventor能知道加载。本文我们放在%AppData%\Autodesk\ApplicationPlugins. 也可在编译后处理中作这个事情。
11. 启动Inventor,看看插件是否加载正常。
12. 特别需要注意的:
1) 再次提醒,C++插件和.NET插件的清单文件格式不太一样。 格式不对会造成插件无法加载。
2) Inventor 2013的插件模板创建的是免注册插件。其中有一步可规定RDS名,如果设置了,dll文件名将含有RDS名。但自动产生的清单文件里却忽略了RDS名,因此请注意将二者保持一致。
3) 缺省情况下,插件向导用IDispatch interfaces创建插件. 但这样的免注册插件无法在XP(无论32位还是64位)上加载正常。另外,如果调试,也会抛出异常。解决办法是用Vtable interfaces创建插件. 所以,如果你原有的插件用的是IDispatch interfaces, 需要转换为Vtable interfaces。假设不在XP上使用,可不做转换。