class 库 COM 互操作项目的 installshield

installshield for class library COM interop project

我创建了一个包含一些 COM 可见类型的 Class 库项目。该项目是通过 InstallShield 安装的。

为了确保正确注册我的程序集,我在构建事件中定义了以下内容:

"%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" /codebase /tlb 
"$(MSBuildProjectDirectory)$(OutputPath)$(AssemblyName).dll"

我正在尝试在 vba 中使用此 tlb 文件。当我构建解决方案时,它正在创建 tlb 文件,我能够将该 tlb 文件添加为 reference 并在 VBA.

我为此项目创建了一个安装程序,并在 InstallShield

的项目文件中添加了 .dll and .tlb 个文件

我在另一个系统上安装了库,.dll and .tlb 文件出现在安装文件夹中 (C:/program files/Project/Name.dll)

但是当我引用那个 tlb 文件,然后尝试从它创建一个对象时,VBA 抛出一个 429 can't create object 错误。

在类库项目属性 - 平台目标中,我尝试了 Any CPU 以及 x64

下面的摘录 from my blog 可能对您有所帮助。我不能 100% 确定您正面临与我相同的问题,但您可能是。

Go to the Project Assistant, and then to the Application Files screen. You’ll need to take a couple of Actions here to properly create the installer. Obviously, you’ll need to add the Primary Output. What’s not so obvious is that you’ll also need to manually link the *.tlb file by selecting installation folder, then the Add File button, and pointing to the file in your \bin\Release directory.

The second not so obvious (and most frustrating) thing is you’ll need to set the properties on the assembly correctly. So, right click on the Primary Output, and select Properties. In the dialog, go to the COM & .Net Settings tab. Once you’re there, use the settings below.

  • Extract COM Information
  • Scan at Build == Dependencies and Properties
  • Check the COM Interop box.

You’ll need to do the same for the *.tlb file, only don’t check the COM Interop box this time.


另一种可能性是您有一个 class 本应具有 ComVisible 属性但没有,或者您缺少 VBA 需要连接的 com 可见接口到服务器。

如评论中所述,您可能还缺少 *.dll 运行所需的依赖项。我 运行 进入那个问题一次。 Installshield 仅选取直接 bin\release\ 目录中的文件。如果您的依赖项之一正在创建一个 sub-目录,比如 bin\release\someDirectory\someFile.dll,那么您将需要在您的项目上自定义 post-build 以将依赖项复制到安装程序构建之前的发布文件夹。