【发布时间】:2011-08-19 02:58:09
【问题描述】:
我已经用 C# 编写了一个 API,它将在 vb6 和 vbscript 中使用,并假设我的 API 详细信息如下:
1. API中有一个表单,但它没有暴露给COM
2. 有一个名为 ShowForm() 的方法,代码为“form1.Show()”。这个方法 ShowForm() 暴露给 COM,所以我可以从 vb6/vbscript 调用这个方法。
所以,我的问题是:
当我在按钮单击事件下调用 vb6 中的 ShowForm() 方法时,会显示在 C# API 中创建的表单,但如果我实例化相同的类并在 vbscript 中调用相同的方法,则表单不会显示。
但是,如果我更改 ShowForm() 中的代码,
- 从“form1.Show()”到“form1.ShowDialog()”,它将在 vb6/vbscript 中显示。但是,它显示为模态形式,我想要的是无模态的
或者
- 从“form1.Show()”到“Application.Run(form1)”。它会显示在 vbscript 但不在 vb6 中(它实际上显示在 vb6 中,但是在我用 C# 关闭表单后它崩溃了)
我该怎么做才能使它在 vb6 和 vbscript 中正常工作?非常感谢您的建议
PS:不是脚本语法问题或COM问题。它应该与 form.show()/ShowDialog()/Application.Run() 或消息循环有关,这是我不太了解的东西
我的代码或多或少是这样的。
//C# code
public void ShowForm()
{
m_frm.tempWebBrowser.Navigate("http://stackoverflow.com", "_self", Encoding.Default.GetBytes(""), "Content-Type: application/x-www-form-urlencoded");
m_frm.FormBorderStyle = FormBorderStyle.Sizable;
m_frm.ShowInTaskbar = true;
m_frm.WindowState = FormWindowState.Maximized;
m_frm.tempWebBrowser.Visible = true;
m_frm.Show();
}
//VB6 code, vbscript also using exactly the same code in the event
Private Sub Command1_Click()
Dim tempClass
Set tempClass = CreateObject("myClass.API")
tempClass.ShowForm
End Sub
【问题讨论】: