C# 使用实例问题从VB6中的Form1调用Form2

C# 使用实例问题从VB6中的Form1调用Form2,c#,vb6,cefsharp,C#,Vb6,Cefsharp,实际上,我想在我的VB6项目中使用cefsharp,我遇到了以下两个问题:- 我的项目是从form1运行的,我需要调用form2,在那里我使用C#类库使用cefsharp初始化了chromium浏览器 现在当我从form1呼叫form2时 form2.showme (其中showme只是一个设置大小等的自定义函数)chromium浏览器能够在没有任何问题的情况下进行初始化,但是当我调用form2时 Public ofrm2 AS form2 Public Sub function() Set

实际上,我想在我的VB6项目中使用cefsharp,我遇到了以下两个问题:-

  • 我的项目是从
    form1
    运行的,我需要调用
    form2
    ,在那里我使用C#类库使用cefsharp初始化了chromium浏览器
  • 现在当我从form1呼叫form2时
    form2.showme
    (其中
    showme
    只是一个设置大小等的自定义函数)chromium浏览器能够在没有任何问题的情况下进行初始化,但是当我调用form2时

    Public ofrm2 AS form2
    
    Public Sub function()
    Set ofrm2=new form2
    call ofrm2.showme
    End Sub
    
    然后,即使没有给出错误日志或任何类型的错误,并且成功地显示了form2,但这次它上没有任何浏览器对象

    我还使用
    SetParent
    SetWindowPos
    在form2中设置chromium浏览器的长度和宽度。我真的找不到问题,请建议一些解决方法

  • 第二个问题是VB6编辑器不允许在我的代码初始化后立即进行调试。对我来说,测试应用程序的唯一方法是生成一个exe,然后运行应用程序并尝试使用日志进行调试
  • 编辑:-****************************************************************

    我的C#dll包含cefsharp包

    [PermissionSet(SecurityAction.Demand, Name ="FullTrust")]
        [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
        [ClassInterface(ClassInterfaceType.None)]
        public partial class Form1 : Form, IForm1
        {
            private ChromiumWebBrowser _browser;
            public Form1()
            {
                InitializeComponent();
                //initializeChromium();
            }
    
            public int initializeChromium()
            {
                CefSettings settings = new CefSettings();
    
                if (!Cef.IsInitialized)
                {
                    CefSharp.Cef.Initialize(settings);
                }
                _browser = new ChromiumWebBrowser("http://127.0.0.1:24125/ABC/DEF.html");
                _browser.RegisterJsObject("External", this);
    
                this.Controls.Add(_browser);
    
                _browser.BringToFront();
                _browser.Dock = DockStyle.Fill;
    
                this.Show();
                return 0;
    
            }
        }
    
    我的表格1:-

    Private Sub Form_Load()
    Call launch ------ This one does not work. definition is given in my module below
    'frmHTML.Show -----This one works
    
    End Sub
    
    Private Sub Form_UnLoad(cancel As Integer)
    Set ofrmHtml = Nothing
    End Sub
    
    ModDec.bas:-

    Option Explicit
    
    Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    
    
    Public ofrmHtml As frmHTML
    
    Public Sub launch()
    Set ofrmHtml = New frmHTML
    Call ofrmHtml.InitChromium1
    
    
    ofrmHtml.ShowMe
    'call ofrmHtml.ShowMe
    End Sub
    
    我的表格2(frmHTML):-


    而C#被添加到这里的原因是什么?@Steve我用C#创建了一个DLL,允许VB6访问cefsharp和Chromium。我知道其他人已经成功地将cefsharp集成到VB6中,其中一个这样的项目是我认为没有足够的代码/细节来找出这两个场景中的不同之处。请添加更多相关详细信息。我想查看表单2中的初始化代码,尤其是
    showme
    函数的内容。。。特别是,是否有任何直接引用
    form2
    ,或者其他一些引用打破了这一点?此外,我可以想象尝试一些事情,比如在
    Form\u Load()
    Form\u Activate()
    或其他路径上尝试一些初始化,只是为了尝试获取有关它实际执行的操作的更多信息,即使它们不会导致实际的修复。
    Option Explicit
    
    Public cSharpObj As New cSharp.Form1
    
    Private Sub Form_Load()  
       'Call InitChromium1
        Exit Sub
    End Sub
    
    Public Sub InitChromium1()
    '   On Error GoTo Err_Hndlr   
    
       SetParent cSharpObj.getHandle, frmHTML.hWnd
       SetWindowPos cSharpObj.getHandle, 0, 0, 0, 512, 480, 0
    
    
    
       Dim i As Integer
       i = -1
       i = cSharpObj.initializeChromium()
    
        Exit Sub
    End Sub
    Public Sub ShowMe()
        Call Me.Show
    End Sub