使用Excel中的ocx依赖项调用RegFree COM vb6 dll

时间:2011-12-29 18:40:44

标签: vba regfreecom

我使用MMM生成一个清单文件,通过VB6.exe客户端调用具有OCX依赖关系的VB6 DLL,这在目标机器上运行良好的Reg-Free。

清单文件的摘录如下,显示了VB6 MS Chart控件依赖关系(MSCHRT20.ocx)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <!-- Make My Manifest 0.9.305 -->
  <assemblyIdentity name="DLL_Tester" processorArchitecture="X86" type="win32" version="1.0.0.0" />

  <file name="TankChecker3_DLL.dll">
    <typelib tlbid="{A23FD5EC-6750-4454-8417-A53FB6436646}" version="14.0" flags="" helpdir="" />
    <comClass clsid="{265A4F7E-3380-41F9-B3D2-624D0B9DD0FA}" tlbid="{A23FD5EC-6750-4454-8417-A53FB6436646}" progid="TankChecker3_DLL.CChart" description="" />
  </file>
  <file name="MSCHRT20.OCX">
    <typelib tlbid="{65E121D4-0C60-11D2-A9FC-0000F8754DA1}" version="2.0" flags="control" helpdir="" />
    <comClass clsid="{3A2B370C-BA0A-11D1-B137-0000F8753F5D}" tlbid="{65E121D4-0C60-11D2-A9FC-0000F8754DA1}" progid="MSChart20Lib.MSChart.2" description="Microsoft Chart Control 6.0 (OLEDB)" />
  </file>

:
: etc
:

</assembly>  

我想使用Excel中的Windows.ActCtx对象使用Excel进行Reg-Free工作。如果我只使用一个没有.ocx依赖项的简单测试HelloWorld VB6 dll,这在目标上的Excel 2010中工作正常机器

请参阅下面我使用的测试清单文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <!-- Make My Manifest 0.9.305 -->
  <assemblyIdentity name="SideBySide2Client" processorArchitecture="X86" type="win32" version="1.0.0.0" />

  <file name="SideBySide2.dll">
    <typelib tlbid="{DD83DC2F-C5C0-40F2-B2F4-B7310B098A16}" version="6.0" flags="" helpdir="" />
    <comClass clsid="{EDF044DE-A6EF-4FE9-9446-67384C1CA8E4}" tlbid="{DD83DC2F-C5C0-40F2-B2F4-B7310B098A16}" threadingModel="Apartment" progid="SideBySide2.SideBySideClass" description="" />
  </file>
</assembly>

但是,如果我使用带有ocx依赖项的完整dll尝试相同的技术,它会在目标计算机上给出错误代码339(找不到ocx依赖项)

所有文件都在XCOPY部署的一个文件夹中。

总而言之,它适用于VB6客户端,但不适用于VBA / ActCtx客户端。 任何想法为什么这不起作用?

感谢大卫

1 个答案:

答案 0 :(得分:0)

这是作为VB 6.0和其他开发工具的一部分提供的许可控件。

你不能只是在它上面使用它并从Excel等应用程序中使用它。据我所知,当您使用Office Developer Edition,VSTA / VSTO等时,情况就是如此。

这可能不是唯一的问题,但由于这个库不是可再发行的,除非作为VB 6.0等应用程序的一部分,没有什么意义。