Avatar billede mads.rode Nybegynder
21. juni 2004 - 15:12 Der er 8 kommentarer og
1 løsning

Bruge struct i C++ fra C#

Hvordan skal man kalde en medtode med en struct som parameter fra C# når der er skrevet i C++?

C++ headerfil:

void Run(struct Parms *parametre);

struct Parms
{
  double antal;
  struct tm dato[3];
}

struct tm
{
  int yy;
  int mm;
  int dd;
}
Avatar billede arne_v Ekspert
21. juni 2004 - 15:21 #1
Jeg antager C# -> DLL med unmanaged C++.

Lige ud af landevejen.

Erklær struct i C#, erklær funktion i C# med dllimport og argumentet som:
  ref typenavn argnavn
Avatar billede finger Nybegynder
21. juni 2004 - 15:23 #2
Avatar billede mads.rode Nybegynder
22. juni 2004 - 10:54 #3
Jeg har brugt arne_v's lille beskrivelse og det ser ud til at virke, jeg havde bare ikke lige opdatet at jeg et sted skulle give en struct med som ser sådanne ud:

struct MoreParms
{
  double aar;
  struct tm datoer[2][2];
}

og når jeg forsøger at sende den med for jeg denne fejl :o(

Additional information: Can not marshal field tm of type MoreParms: This type can not be marshaled as a structure field.
Avatar billede arne_v Ekspert
22. juni 2004 - 10:59 #4
Prøv:

struct MoreParms
{
  double aar;
  [MarshalAs( UnmanagedType.ByValArray, SizeConst=4 )] struct tm datoer[2][2];
}
Avatar billede mads.rode Nybegynder
22. juni 2004 - 11:08 #5
Jeg for den samme fejl. Min erklæring i C# ser sådan her ud:

struct MoreParms
{
  double aar;
  [MarshalAs( UnmanagedType.ByValArray, SizeConst=4 )]
  struct tm[,] datoer;
}

Jeg opretter så felterne inden jeg sender den med:

MoreParms moreParms = new MoreParms();
moreParms.datoer = new tm[2,2];
Avatar billede arne_v Ekspert
22. juni 2004 - 12:03 #6
Jeg kan heller ikke få det til at virke.

Jeg kan godt lege videre i aften med det.

men indtil dat tror jeg at du må sige at [2][2] = [4]
Avatar billede arne_v Ekspert
22. juni 2004 - 19:58 #7
Jeg kan ikke få 2 dimensioner til at virke.

Du må nok satse på 1 dimension.
Avatar billede arne_v Ekspert
22. juni 2004 - 19:58 #8
Og et svar
Avatar billede mads.rode Nybegynder
23. juni 2004 - 08:20 #9
Tak for forsøget.
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