Avatar billede Lasse Novice
08. april 2005 - 19:01 Der er 7 kommentarer og
1 løsning

P/Interop med c++ og arrays

Jeg er igang med at lave en dll i c++. Dll'en skal accesses fra c# via eksporteret funktioner. En af funktionerne skal give brugeren et array af typen Devices tilbage:

C++ deklaration:
Devices* GetDevices();

C# kald
Devices devices[] = Dll.GetDevices();

Uden at have proevet dette, saa regner jeg med at dette skaber komplikationer, eftersom GetDevices returnerer en pointer (og derved ikke laengde paa array) hvilket c# formodentlig ikke vil tolke korrekt.

Hvad er mine muligheder her (jeg kan aendre baade i c++ og i c#)?
Avatar billede arne_v Ekspert
08. april 2005 - 19:03 #1
En mulighed var at bruge pointer i C# inden i unsafe { }
Avatar billede arne_v Ekspert
08. april 2005 - 19:04 #2
Så var der:

int GetNoDevices();
void GetDevices(Devices* devs);
Avatar billede Lasse Novice
08. april 2005 - 19:52 #3
Jeg leder efter en loesning der kosmetisk ser godt ud (lidt pjattet, men det er nu det jeg leder efter).

Den foreslaaet loesning vil virke men er ikke kosmetisk korrekt. Mon der er andre loesninger?

Jeg kunne selvfoelgelig lave et kald GetDevices(System.IntPtr pDevice, ref int numberOfDevices), men saa skal jeg ud i marshalling, hvilket heller ikke er kosmetisk korrekt.
Avatar billede Lasse Novice
08. april 2005 - 19:54 #4
En anden loesning maaske... er:

c#
Init(funcktionsPointer) // delegate

c++;
Ved hver fundne device, kald funktionsPointer med device som parameter

Kan dette lade sig goere?
Avatar billede Lasse Novice
08. april 2005 - 19:58 #5
Ahh arne_V... nu forstaar jeg... 2 forskellige loesninger....

ja... det er rigtigt... den sidste er en mulighed. Men saa skal jeg i GetDevices kopiere device fra c++ memory til c# memory, ik' sandt?
Avatar billede arne_v Ekspert
08. april 2005 - 20:02 #6
ja

men antallet er kendt, hvilket må gøre det nemmere, bl.a. kan du jo lade
C# allokere arrayet
Avatar billede Lasse Novice
08. april 2005 - 20:07 #7
Jeg proever det i weekenden og vender tilbage med et svar.
Avatar billede arne_v Ekspert
26. april 2005 - 00:12 #8
Kommet videre ?

Og et svar fra mig
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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