pobieranie danych z dll w c++

Odpowiedz Nowy wątek
2011-08-03 13:32
Anonim
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

a jak wygląda definicja getStruct w c++? - massther 2011-08-03 16:48

Pozostało 580 znaków

2011-08-04 00:16
0
public extern static void getStruct(out MyInfo myI);

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

edytowany 1x, ostatnio: Azarien, 2011-08-04 00:16

Pozostało 580 znaków

2011-08-04 00:28
msm
0

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);
edytowany 1x, ostatnio: msm, 2011-08-04 00:29

Pozostało 580 znaków

2011-08-04 00:40
0
public extern static void getInfo(int id, out MyInfo myI);

lepiej?

Akurat twojego posta nie widziałem kiedy pisałem więc się do niego nie odniosłem. - msm 2011-08-04 05:02

Pozostało 580 znaków

2011-08-04 02:24
Anonim
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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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