用COM项目包装VB应用程序项目

时间:2014-10-22 20:48:19

标签: c# vb.net visual-studio-2012

我试图确定使用我们公司的产品与COM的可行性。为此,我在解决方案中编写了一个(MyAppCom)dll并引用了原始(MyApp)exe项目。 MyAppCom创建MyApp(mainform)的实例和实例。

我遇到的主要问题是应用程序入口点是应用程序类型(包含设置,启动表单等)。一般来说,这并不是那么糟糕,但有几个问题让我头疼。

  1. app config使用调用exes名称来搜索应用程序配置文件(即如果我通过Python调用MyApp的com实例,它会查找python.exe.config而不是MyApp。我只是通过复制设置文件来回避这个问题,但是如果有人知道如何引用这个特定的配置设置,那么任何帮助都将不胜感激。

  2. 第二点有点粘。似乎MyApp已将mainform设置为其启动形式,这似乎创建了它的全局实例。我到处寻找,除了通过MyAppCom之外,没有明确的mainform初始化。当我从MyAppCom初始化mainform并且子窗体试图引用全局MyApp.mainform时,这就成了一个问题。在这种情况下,它显然没有初始化(因为我没有从MyApp创建它)。

  3. 这是其他人做过的吗?我现在已经搜索了几天没有运气,但我不能想象我是少数几个尝试过的人之一。关于产品的一点背景 - 它最初是用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
    

0 个答案:

没有答案