Avatar billede mikl-dk Nybegynder
31. august 2006 - 19:24 Der er 8 kommentarer og
1 løsning

Kald af C#-kode: DLL eller program?

Hej,

I en funktion i en C++-DLL, har jeg brug for at køre noget C#-kode. Jeg laver selv begge dele, men begge dele skal laves i henholdsvis C++ og C#. Jeg har altså brug for at C++-delen kalder C#-delen.

Jeg har siddet og rodet med at få det til at virke at kalde C# som DLL, men det går ikke helt. Og så kom jeg til at tænke på, hvad fordele og ulemperne egentlig er, hvorvidt om C# er en DLL eller et program? Jeg kunne ikke komme i tanke om det, og det er noget nemmere at kalde et eksternt program fra C++ end en C#-DLL. Så kort og godt: pros'n'cons?

/mikl-dk
Avatar billede arne_v Ekspert
31. august 2006 - 19:38 #1
der er:

native EXE
.NET EXE
native Win32 DLL
native COM DLL
normal .NET DLL
.NET DLL med COM wrapper

.NET EXE lavet i C++ kan uden videre kalde .NET DLL lavet i C#

native EXE lavet i C++ kan ikke kalde en normal .NET DLL lavet i C#

native EXE lavet i C++ kan kalde en .NET DLL med COM wrapper skrevet i C++
Avatar billede arne_v Ekspert
31. august 2006 - 19:40 #2
det er faktisk nemt at starte et eksternt program i C# (Process Start)

kalde COM fra C++ er absolut supporteret, men kraever en vis indsigt i COM's
forunderlige verden
Avatar billede mikl-dk Nybegynder
31. august 2006 - 19:41 #3
Jeg tror ikke jeg har gjort det klart nok, hvad jeg egentlig ønsker svar på: jeg vil kort og godt bare vide, om det ikke er "det samme" om C++-DLL'en kalder et C#-program eller en C#-DLL? Altså jeg ved godt det laves på vidt forskellige måder, men er der nogen forskel i driftsikkerhed, hastighed eller andre ting, jeg bør overveje? Ellers er det jo klart nemmest bare at få C+-DLL'en til at kalde  et C#-program.
Avatar billede mikl-dk Nybegynder
31. august 2006 - 19:42 #4
Mit udgangspunkt er en DLL i C++ (som jeg selv laver). Herfra har jeg to valg - jeg skal bare finde ud af, hvilket et af dem, jeg skal tage - og hvad fordelene/ulemperne ved dem er:
1) Kalde en funktion i en DLL lavet i C#
2) Kalde et program lavet i C#

De skal som sådan ikke interagere, jeg har blot brug for at få kørt den C#-funktion, når C++-DLL kaldes.
Avatar billede arne_v Ekspert
31. august 2006 - 19:52 #5
det er hurtigere at kalde noget "in process" i en DLL uanset slags end at
starte en ny process op med en EXE

relativt er det endda meget hurtigere

men medmindre du skal goere det rigtigt mange gange, saa betyder det naeppe noget
Avatar billede mikl-dk Nybegynder
31. august 2006 - 19:59 #6
Okay, så i og med det er en del nemmere og faktisk også giver færre fejlkilder fordi man undgår COM-wrapningen, så er det helt okay at lave et C#-program, der bliver kaldt af C++-DLL'en?
Avatar billede arne_v Ekspert
31. august 2006 - 20:20 #7
ja da
Avatar billede mikl-dk Nybegynder
31. august 2006 - 20:33 #8
Godt så. Det mente jeg nok - men du kender jo det, at når noget er indelysende kan der godt være nogle skjulte ting, som man ikke lige har tænkt på. Derfor spurgte jeg :-)

Tak for den hurtige respons. Læg venligst et svar, så du kan få lidt point :-)
Avatar billede arne_v Ekspert
31. august 2006 - 21:10 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester