pobieranie danych z dll w c++

0

Witam serdecznie, jak w temacie chciałbym w c# móc odczytać dane zapisane w strukturze która to znajduję się w dllce napisaną w c++, która to jest w postaci:

struct MyInfo
 {
 	int Number;
 	char *Name;
 };

w C# mam:

 
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct MyInfo
    { 
	public int Number;
        	[MarshalAs(UnmanagedType.LPStr)]
        	public string Name;
    }

kod funkcji macierzystej :

void getInfo( int id, MyInfo *info)
{
Student *stud;
int status = getStudent(id,stud);
if(!status)
info -> Number = stud->index;
info -> Name = stud -> name;
}

natomiast wywołanie dll wygląda następująco:

 
internal const string DLLka = "Testdllki.dll";
        [DllImport(DLLka,EntryPoint="getStruct")]
        public extern static void getStruct(MyInfo myI);

I to nie działa, tak jak bym chciał, działa w przypadku jeśli tylko chce przesłać same wartości liczbowe, natomiast przy pojawieniu się jakimkolwiek znaku typu char, char*, czy char[] program albo wyrzuca wyjątek, albo zwraca null'a

0
public extern static void getStruct(out MyInfo myI);

możesz wywalić „CharSet=CharSet.Ansi” oraz „[MarshalAs(UnmanagedType.LPStr)]” bo to jest domyślnie.

1

Ustalmy fakty:
Funkcja w C++:

void getInfo( int id, MyInfo *info)
{
Student *stud;
int status = getStudent(id,stud);
if(!status)
info -> Number = stud->index;
info -> Name = stud -> name;
}
 

deklaracja w C#:

internal const string DLLka = "Testdllki.dll";
        [DllImport(DLLka,EntryPoint="getStruct")]
        public extern static void getStruct(MyInfo myI);
 

struktura w C++;

struct MyInfo
 {
         int Number;
         char *Name;
 };

struktura w C#:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct MyInfo
    { 
        public int Number;
                [MarshalAs(UnmanagedType.LPStr)]
                public string Name;
    }

Jeśli tak to to się lekko kupy nie trzyma...

        [DllImport(DLLka)]
        public extern static void getInfo(out MyInfo myI);
0
public extern static void getInfo(int id, out MyInfo myI);

lepiej?

0

Super zadziałało:) dziękuje za pomoc, nigdzie nie mogłem znaleźć czegoś, co by zadziałało, dzięki, jesteście Wielcy, chylę czoła

1 użytkowników online, w tym zalogowanych: 0, gości: 1