我试图确定使用我们公司的产品与COM的可行性。为此,我在解决方案中编写了一个(MyAppCom)dll并引用了原始(MyApp)exe项目。 MyAppCom创建MyApp(mainform)的实例和实例。
我遇到的主要问题是应用程序入口点是应用程序类型(包含设置,启动表单等)。一般来说,这并不是那么糟糕,但有几个问题让我头疼。
app config使用调用exes名称来搜索应用程序配置文件(即如果我通过Python调用MyApp的com实例,它会查找python.exe.config而不是MyApp。我只是通过复制设置文件来回避这个问题,但是如果有人知道如何引用这个特定的配置设置,那么任何帮助都将不胜感激。
第二点有点粘。似乎MyApp已将mainform设置为其启动形式,这似乎创建了它的全局实例。我到处寻找,除了通过MyAppCom之外,没有明确的mainform初始化。当我从MyAppCom初始化mainform并且子窗体试图引用全局MyApp.mainform时,这就成了一个问题。在这种情况下,它显然没有初始化(因为我没有从MyApp创建它)。
这是其他人做过的吗?我现在已经搜索了几天没有运气,但我不能想象我是少数几个尝试过的人之一。关于产品的一点背景 - 它最初是用VB6编写的,现在用C#中的新项目更新到VB.NET。包装器也是用C#编写的。
这是com包装器(MyAppCom)(名称已被更改以保护不那么无辜):
public interface IMainCom
{
void Init();
}
[ClassInterface(ClassInterfaceType.None)]
public class MainCom : IMainCom
{
private MDIMain mMDIMain = null;
public void Init()
{
OpenMain();
}
private void OpenMain()
{
mMDIMain = new MDIMain();
mMDIMain.Show();
}
}
这里也是MyApp的App.Designer:
Namespace My
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = false
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.MyApp.MDIMain
End Sub
End Class
End Namespace