Avatar billede glen5000 Nybegynder
05. november 2008 - 11:24 Der er 5 kommentarer og
1 løsning

Char array fra C# til C

Hej

Jeg har et problem med at sende et char array fra C# til min C kode.

Min C kode ser sådan her ud:

#include <string.h>

int CTest(char *text) {
    return strlen(text);
}

Jeg har prøver at inkludere den på 2 måder i C#.

Første måde:

[DllImport("../../CTest.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static private extern unsafe int CTest(char *text);
       
static void Main(string[] args)
{
char[] a = "Test".ToCharArray();
int result = -1;
unsafe
{
fixed (char* t = a)                   
result = CTest(t);
}
Console.WriteLine("Result: {0}", result);
Console.ReadKey();
}

Anden måde:

[DllImport("../../CTest.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static private extern unsafe int CTest(IntPtr text);

static void Main(string[] args)
{
char[] a = "Test".ToCharArray();
int result = -1;

IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(new System.Char()) * (a.Length));
Marshal.Copy(a, 0, pointer, a.Length);

result = CTest(pointer);

Console.WriteLine("Result: {0}", result);
Console.ReadKey();
}

Lige meget hvor lang en tekst jeg skriver i variablen a, så returnere min C kode altid 1. Det er som om den ikke kan se at det et array.

Hvad gør jeg galt?

Hilsen Glen
Avatar billede bvli Praktikant
05. november 2008 - 12:32 #1
Prøv:


static private extern unsafe int CTest(StringBuilder text);

/b
Avatar billede arne_v Ekspert
05. november 2008 - 12:50 #2
[DllImport("../../CTest.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static private extern unsafe int CTest(string text);

og

CTest("Test")
Avatar billede arne_v Ekspert
05. november 2008 - 12:52 #3
unsafe er ikke nødvendig

[DllImport("../../CTest.dll", SetLastError = true, CharSet = CharSet.Ansi)]
static private extern int CTest(string text);
Avatar billede arne_v Ekspert
05. november 2008 - 12:52 #4
Vigtigt: du skal sikre dig at din DLL rent faktisk eksporterer CTest funktionen !
Avatar billede glen5000 Nybegynder
05. november 2008 - 13:09 #5
Mange tak, det virker perfekt med CTest(string text);

Hvad mener du med at "eksporterer CTest funktionen"? Når min kode virker nu, betyder det så at den eksporterer CTest?

Husk at smide et svar:)
Avatar billede arne_v Ekspert
06. november 2008 - 04:24 #6
Ja.

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
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