标签: com-interp

从C#模态形式显示VB6模态形式时,事件不会触发?

编辑 -我发现当VB6程序运行编译时,事件正常工作,没有问题。

只有当代码在VB6 IDE中运行时,事件才会中断!

这不能完全解决问题,因为如果我们不能在IDE中进行调试,那将是非常低效的开发。但是也许它可以提供更多的根本原因的见解。我猜想,如果可能的话,需要进行的修复是使事件在IDE中正常/正确地工作。


我正在使用两个环境之间的COM互操作从模态C#Winform加载模态VB6表单。在这种配置(模态到模态)下,不会以VB6格式触发任何事件,例如。甚至没有Form_Load。

如果表单是非模式加载的,那么事情就可以正常工作,但是当然这不能很好地满足UI要求。

我想了解这个问题的根本原因,以及如果可以采取任何措施,该怎么办。我在这里包括了我可以想到的问题的最基本的再现。

该体系结构是将协调对象从VB6传递到C#代码,该代码充当包装器以显示VB6形式。

事件顺序:

  1. VB6主程序启动
  2. VB6创建一个(C#)ModalCSForm对象并将其对VB6Bridge对象的引用设置为
  3. VB6拨打电话以显示 ModalCSForm
  4. ModalCSForm 显示
  5. 用户点击按钮 ModalCSForm
  6. 按钮单击处理程序使用VB6Bridge对象显示ModalVB6Form
  7. ModalVB6Form 显示
  8. VB6中没有事件发生。VB6代码中不会出现断点。

C#项目:

班级/形式ModalCSForm:

[ClassInterface(ClassInterfaceType.AutoDual)]
public partial class ModalCSForm : Form
{
    ...

    public IVB6Bridge Bridge { get; set; }

    private void button1_Click(object sender, EventArgs e) =>
        Bridge.ShowVB6FormModally();
}
Run Code Online (Sandbox Code Playgroud)

界面IVB6Bridge:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IVB6Bridge
{
    void ShowVB6FormModally();
}
Run Code Online (Sandbox Code Playgroud)

VB6项目:

主程序:

Sub main()
    Dim m As …
Run Code Online (Sandbox Code Playgroud)

c# vb6 com com-interp

6
推荐指数
0
解决办法
84
查看次数

标签 统计

c# ×1

com ×1

com-interp ×1

vb6 ×1