"Troels Thomsen" <nej tak ...> wrote in message
news:474b4203$0$15893$edfadb0f@dtext01.news.tele.dk...
> >
>> Hvis du kan undgå COM, så gør det.
>>
>
> Jeg skal sådan set bare opnå, at nogen kan fjernstyre dette program fra
> noget .net.
Ok.
> Jeg har sourcen, så jeg kan godt lave en smule om.
> Hvad er mulighederne?
Der er en pæn håndfuld muligheder, f.eks.
* Isoler funktionaliteten i et DLL, som bruges fra både .NET og MFC
applikationen, evt. med en C++/CLI wrapper lag
* Isoler funktionaliteten i en (COM, ICE, CORBA, TCP/IP) server, som både
fra både .NET og MFC applikationen
* Lav en COM server inde i MFC applikationen, som .NET applikationen
kalder
* Lav en ICE eller CORBA server inde i MFC applikationen, som .NET
applikationen kalder.
Det simpleste kan sagtens være at lave en COM server inde i MFC
applikationen, men man får så ulemperne med registering i registry,
begrænset type interface etc.
COM understøtter 2 typer interfaces: vtable og automation. Undgå om muligt
automation, fordi det er et dynamisk typet interface som blev lavet af
hensyn til tidlige udgaver af VB. Det passer dårligt med statisk typede
sprog som C++ og C#, og giver unødvendigt runtime overhead.
Jeg vil anbefale at kigge f.eks. i den bog jeg henviste til eller finde
nogle gode sider på nettet om MFC og COM programmering.
>
> Altså det kan vel lade sig gøre at poste events til gui kontrollerne fra
> en anden applikation, men er det ikke lidt crude ?
Du risikerer nemt at få problemer med det, hvis det skal køre på Vista.
Rettighedssystemet sætter, så vidt jeg har forstået, restriktioner på det at
sende events mellem applikationer.
Envidere hvis du er heldig (det er man næsten aldrig) er MFC applikationen
delt pænt op i brugerflade og "business logik", og det du ønsker er at
benytte business logikken. Der vil det være en omvej at anvende brugerfladen
som interface - f.eks. er en dialogboks ofte blot en måde at sætte nogle
parametre op til et kald i business logikken.
Det du så har brug for er en anden (COM, CORBA, ICE etc.) interface til
business logikken.
> Hmm, lytte på en IP port, og så sende kommandoer den vej
Ja - men det er også lidt tungt, hvis der bliver ret mange kommandoer.
--
Venlig hilsen
Mogens Hansen