实现IDTExtensibility 2并注册外接程序是否不足以使其对Office可见



因此,我正试图为64位MS Office创建一个COM加载项(没有特别的应用程序,只是想让一些东西正常工作(。我不是想为VBE做一个插件,只是为Office应用程序本身做一些插件。我已经实现了IDTExtensibility2,如下所示(文件顶部(:

<Guid("94164866-CD9D-497A-9A8B-B476BE39749F"), 
ProgId("COM_Add-In_Test.Connection"), 
ComDefaultInterface(GetType(IDTExtensibility2)), 
ClassInterface(ClassInterfaceType.None), ComVisible(True)>
Public Class Connection
Implements IDTExtensibility2

我在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Excel\Addins\COM_Add-In_Test下添加了注册表项。连接(FriendlyName、Description和LoadBehavior(。

Visual Studio会自动为COM Interop注册外接程序(选中该框(。我还尝试在HKCU\Classes\CLSID{94164866-CD9D-497A-9A8B-B476BE39749F}下手动添加注册表项,但没有成功。

当我加载Excel时,加载项不在COM加载项对话框中,也不会发生任何事情(我的OnConnection方法是MsgBox("Hello World!"((。

我没有使用任何类型的插件框架(VSTO、ExcelDNA等(。我以前使用过这些,但非常想了解如何手动完成这个过程。

我在这里错过了什么?

所以,经过一些研究,我发现了以下内容:

  1. 没有Visual Studio为您注册COM互操作类
  2. 使用带有/reg参数的RegAsm工具,让它为您生成.reg文件
  3. 编辑.reg文件并将对HKEY_CLASSES_ROOT的引用替换为对HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES的引用(如果您不想要求管理员权限进行安装(。示例:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}]
@="YOUR_PROG_ID"
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}Implemented Categories]
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}Implemented Categories{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="YOUR_PROG_ID"
"Assembly"="YOUR_ASSEMBLY_FULL_NAME"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///PATH_TO_YOUR_DLL"
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}InprocServer321.0.0.0]
"Class"="YOUR_PROG_ID"
"Assembly"="YOUR_ASSEMBLY_FULL_NAME"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///PATH_TO_YOUR_DLL"
[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{YOUR_GUID}ProgId]
@="YOUR_PROG_ID"
  1. 使用外接程序spy(可在此处获得:https://github.com/NetOfficeFw/AddInSpy(来帮助诊断问题并监控您的进度

最新更新