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.