Obiekt COM - przerobienie aplikacji Winforms

0

Witam.
Potrzebuje nakierowania jak zrobić z aplikacji okienkowej obiekt COM dostępny dla ActiveX.

Czy jedyną opcją jest zrobić projekt Class Library i w nim dodać i otwierać okienka?
Czy w projekcie już okienkowym dodać klasę i atrybutami oznaczyć, że to COM - jak to zrobić?

0

Nie mam zbyt dużego doświadczenia w tej kwestii, ale wydaje mi się, że są inne opcje.
Ten kawałek dokumentacji może Cię nakieruje: link
Choć nie wiem, jakie są dobre praktyki w tym przypadku.

0

Tą kwestie mam opanowaną

    [Guid("5347C651-AC47-4BA2-A2E8-326A64AD89BD")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [ComVisible(true)]
    public interface IAdamWox
    {
        [DispId(4)]
        void OpenForm(IAdoSession Session);
    }

    [Guid("54C45300-13EB-4F7E-816B-A57BC69A3BE4")]
    [ProgId("TRON.AdamWox")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComDefaultInterface(typeof(IAdamWox))]
    [ComVisible(true)]
    public class AdamWox : IAdamWox
    {
        public void OpenForm(IAdoSession Session)
        {
            Form1 frm = new Form1();
            if(frm.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    //Ściągnij zmiany z okna i zapisz 
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
        }
    }

I to działa i mam wrażenie, że to jest jedyne wyjście. Projekt Class Library i dodać wszystkie elementy z projektu WinForms. Liczyłem na to, że da się zrobić odwrotnie.

PS.
Dla wyjaśnienia po co mi to. Comarch Optima ma coś takiego jak funkcje dodatkowe, które są pisane w JS. Bardzo mi zależy na tym, aby przejąć obiekt Session z Optimy do zewnętrznej aplikacji. Potrzebowałem zrobić swój własny COM, aby zrobić to:

var tron = new ActiveXObject("TRON.AdamWox");

if(tron != null) 
\{
     tron.OpenForm(Session.Session)
\}

Aplikacja jest projektem okienkowym z DevExpressem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1