我日常工作的一部分是维护和扩展旧版VB6应用程序。 一个通用引擎用C / C ++编写,VB6使用这些功能来提高性能。

当涉及异步编程时,C接口是不够的,我们依靠COM控件将事件激发到VB6。

我的问题是,当我在VB6中注册控件时,VB将该控件加载到内存中,直到退出VB6 IDE才卸载。 由于控件始终被加载,因此无法在VC6中重新编译它,因为DLL文件已锁定。

我发现的解决方案不是在VB中启用控件,而是使用具有控件全名的CreateObject() 然后的问题是,我必须将控件声明为对象,因为VB6不了解我正在使用的接口,并且我无法访问IntelliSense,这很痛苦。

知道如何在退出应用程序后或直接在IDE中告诉VB6卸载控件吗?

===============>>#1 票数:27 已采纳

我很确定没有强迫VB6卸载控件的好方法。

这是我的工作...而不是并行运行Visual C和Visual Basic,而是 VC 运行VB6:

  1. 加载VC
  2. 打开包含您的COM对象的项目
  3. 编辑,更改等
  4. 在VC中,使用适当的命令行参数将Output Executable设置为VB6.EXE以加载VB6工作区
  5. 现在只需按F5键即可启动VB6 IDE并加载您的VB6项目
  6. 当您想再次更改COM代码时,退出VB6.EXE,进行更改,然后再次按F5。 只要保存工作区,VB6就会记住您打开了哪些窗口以及所有项目设置。

这种方法的优点:

  • 您可以在COM对象中设置断点,并使用完整的源调试器对其进行调试
  • 您可以同时在C和VB中愉快地进行调试
  • 每当VB6运行时,它始终具有最新版本的COM DLL。

  ask by Vincent Robert translate from so

未解决问题?本站智能推荐:

1回复

VB6中的COM控件:使控件中的容器不受控制

我在VB6中使用了ac #control,它基本上是一个带圆角的面板。 我想知道是否有办法使控件成为一个容器,有点像Frame是一个容器。 基本上我希望能够把东西放在里面,这样它们就可以一起移动,最重要的是把东西放在它的前面 。 现在,如果我在它上面放置一个标签或命令,它就会在我的CO
2回复

调用.NET表单的COM App调用COM表单,在编译时有效,但在VB6 IDE中不起作用

我有一个旧版VB6 / COM应用程序,我们正在通过.NET DLL将所有代码迁移到.NET(VB.NET)。 所有新的表单开发都在.NET DLL中完成。 我们使用函数指针来调用.NET形式的COM函数: 我在.NET中创建一个委托 在运行时将委托设置为COM函数的A
1回复

在VB6中引用COM库(在VS2013中创建)时看到可用的函数

我在VS2013中创建了一个类库,并向其中添加了COM类并添加了一些功能。 我编译并使用VB6将其带到另一台计算机上,以便可以对其进行注册然后引用(.tlb)。 到目前为止,我正在使用CreateObject来调用COM库中的函数,如下所示: 我有没有机会在智能感知中在comOb
2回复

在vb6中使用.NET COM

我在vb6中使用.NET COM时遇到问题,编译好了,我使用regasm注册它,在vb6项目中添加对它的引用,甚至还有intellisense。 但是当我尝试制作一个实例时,它会给我一个“自动化错误”。 任何人都可以帮忙吗? 提前致谢。
1回复

使用VS2015 RC为VB6创建COM用户控件

我想在VS2015 RC(VB.NET)中创建一个用户控件,并在VB6中使用它。 关于这种情况的大多数文章都已经过时了。 我刚刚尝试了以下方法: 在VS2015 RC(Visual Basic.NET)中,我创建了一个新的usercontrol并将其属性设置为“ COM vis
2回复

通过VB6中的COM处理在.NET类上公开的事件

通过VB6中的COM处理在.NET类上公开的事件 我的测试.NET(在编译器设置中注册为interop的类库)代码: 我的测试VB6应用程序winforms代码(引用了上面的类库): 具体来说,我不确定如何在VB6中设置处理程序,我得到的编译错误是VB6中此行上的“参数不可
2回复

在VB6中使用IUnknown派生的C ++ COM对象

我已经开发了一个基于C ++ DLL的COM对象,该对象实现了一些IUnknown派生接口。 如何在VB6中使用它? VB6是否支持基于IUnknown的接口,还是我需要从IDispatch派生? UPDATE 我没有使用过ATL。 该实现基于一个没有ATL或MFC文章的非常简
4回复

Vb6的C#和com

我在使用C#和COM时遇到问题。 :( 和VB代码 我得到以下 ActiveX组件无法创建对象?
2回复

使用VB6 IDE END调试时不调用处理和/或Finalize

不久前从我的问题开始。 我已经解决了与此有关的大部分内容。 检测COM对象何时超出范围 现在,在开发人员处理VB6代码时,我面临一个新问题。 如果他们在IDE中运行项目,然后按END,则将调用Dispose或Finalize。 就像VB6的Debugging部分只是立即分离而无
2回复

为什么在VB6中用coclass名称替换COM接口名称?

我正在开发一个C ++ COM库,以便从VB6应用程序中使用它。 .IDL文件定义了一些接口和一个类库,其中包含一些实现这些接口的组件类: VB6中的对象浏览器将CCOMCvBitmap类的SetPixelBuffer方法的定义显示为Sub SetPixelBuffer(pBuffer