我创建了一个包含一些COM可见类型的类库项目。该项目通过InstallShield安装。
为确保正确注册我的程序集,我在构建事件中定义了以下内容:
"%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" /codebase /tlb
"$(MSBuildProjectDirectory)\$(OutputPath)$(AssemblyName).dll"
我正在尝试在vba中使用此 tlb 文件。当我构建解决方案时,它正在创建 tlb 文件,我可以将该tlb文件添加为引用并在VBA中使用它。
我为此项目创建了一个安装程序,并在InstallShield的项目文件中添加了.dll and .tlb
个文件
我在另一个系统中安装了库,.dll and .tlb
文件出现在安装文件夹中(C:/ program files / Project / Name.dll)
但是当我引用那个tlb
文件,然后尝试从中创建一个对象时,VBA会抛出429 can't create object
错误。
在classlibrary项目属性 - 平台目标中,我尝试了Any CPU
以及x64
答案 0 :(得分:1)
您可以在下面找到可能有帮助的摘录from my blog。我不是100%肯定你面临的问题与我相同,但你可能会这样。
转到Project Assistant,然后转到“应用程序文件”屏幕。 你需要在这里采取一些行动来正确创建 安装程序。显然,您需要添加主输出。什么是 不那么明显的是你还需要手动链接* .tlb 选择安装文件夹,然后选择添加文件按钮,然后选择文件 指向\ bin \ Release目录中的文件。
第二个不那么明显(也是最令人沮丧)的事情是你需要的 正确设置程序集上的属性。所以,右键单击 主输出,然后选择属性。在对话框中,转到 COM& .Net设置选项卡。一旦你在那里,使用下面的设置。
- 提取COM信息
- 在Build == Dependencies and Properties
上扫描- 检查COM Interop框。
您需要为* .tlb文件执行相同的操作,只有 不 检查 这次是COM Interop盒子。
另一种可能性是你有一个应该具有ComVisible
属性的类,或者你缺少VBA连接到服务器所需的com可见接口。
正如评论中提到的,您可能还缺少* .dll需要运行的依赖项。我遇到过那个问题一次。 Installshield仅在bin\release\
目录中选取直接的文件。如果您的某个依赖项正在创建 sub 目录,比如bin\release\someDirectory\someFile.dll
,那么您需要在项目上进行自定义后期构建,以便在安装程序之前将依赖项复制到release文件夹中建立。