最近,我在C#中编写了一个类库,用于Office应用程序,包括约70人使用的关键Access应用程序.对于具有管理员权限的用户,注册DLL很简单,但让DLL在其他计算机上运行是有问题的.
RegAsm YourDll.dll /tlb /codebaseYourDll.tlb在VBA中添加引用:工具 - >引用Regasm在这里做了几件事.首先,它创建了一个类型库(YourDLL.tlb),它提供有关DLL中的类的信息.其次,它将有关库的信息存储在注册表中,以便系统"知道"当您要求将类实例化为对象时的含义.
要查看Regasm添加的注册表项,可以使用以下/regfile参数运行它:
Regasm YourDLL.dll /codebase /regfile
(该/regfile选项对/tlb参数无效.)
如果该/codebase选项告诉Regasm包含有关YourDLL.dll磁盘位置的信息,这对于创建对象很重要.
如果您YourDLL.reg在文本编辑器中打开,您将看到Regasm添加到注册表的条目:条目HKEY_Classes_Root(实际上只是重定向到HKLM\Software\Classes).不幸的是,您需要管理员权限才能修改HKLM,因此这对我们的其他用户无效.
还有一些其他线程(例如,注册没有管理员权限的COM,注册COM DLL供VBA使用,注册DLL(ActiveX)用于非管理员用户,无法注册.NET COM DLL,COM Interop没有regasm)讨论问题,但他们的解决方案是复杂的(例如需要注册表重定向)或不完整(假设你已经知道至少一半的答案)或不适用于混合64/32位环境(例如Win64,Office32).
那么如何在没有管理权限的情况下注册在Visual Studio中创建的COM DLL,以便在当前用户的VBA 32和64位环境中使用?
问题定义
我有两个USB显微镜读数部分和序列号.我想控制Excel-VBA中屏幕截图的显示和记录.
我想尝试使用提供的VLC活动X组件.我需要整理产品是一个不需要安装的单拉链.我认为使用这个activex对象作为免注册COM是可行的方法.
参考
我一直在做我的作业,这里是我的参考.
到目前为止我的尝试.
我创建了Desktop\excel vlc demo\excel vlc demo.xlsb然后我将整个vlc发行版复制到Desktop\excel vlc demo\vlc \
这包括axvlc.dll和axvlc.dll.manifest
我创建了一个模块并将此代码放入其中.
Sub VLC()
Dim actCtx As Object
Set actCtx = CreateObject("Microsoft.Windows.ActCtx")
actCtx.Manifest = ThisWorkbook.Path & "\vlc\axvlc.dll.manifest"
Dim myVlC As Object
Set myVlC = actCtx.CreateObject("AXVLC.VLCPlugin2")
myVlC.Visible = True
myVlC.playlist.Add (ThisWorkbook.Path & "\demo.mov")
myVlC.playlist.Play
End Sub
Run Code Online (Sandbox Code Playgroud)
这就失败了
Set myVlC = actCtx.CreateObject("AXVLC.VLCPlugin2")
Run Code Online (Sandbox Code Playgroud)
有错误
Run-time error '429':
ActiveX component can't create object
Run Code Online (Sandbox Code Playgroud)
我可能有错误的对象名称"AXVLC.VLCPlugin2",我无法确认它是否仍然在文档中有效.
也可能是"user1610015"在说"我不认为你可以在这种情况下使无reg的COM工作"是正确的
在这一点上,我没有想法,我之前从未尝试过免费的COM,因此我不知道我是否在使用无reg的COM或axvlc部分做错了!
谢谢
编辑1:尝试早期绑定
我进入工具 - >引用,然后单击浏览并添加了axvlc.dll文件.我修改了代码如下(AXVLC.VLCPlugin2部分自动完成,所以至少这部分应该工作) …