DLLs - struct* als Parameter uebergeben



  • Hallo!

    Ich habe folgendes Problem:

    Ich habe eine dll geschieben, DIE PER EIGENEM TESTPROGRAMM NACHWEISLICH FUNKTIONIERT.
    Ok.
    Im Prinzip bietet sie nur eine Funktion an:

    __declspec(dllexport) int blah (struct_type * s);
    

    wobei

    typedef struct {
    int a;
    int b;
    ...} struct_type;
    

    der Typ des Parameters ist (ca. 20 longs).

    Ok. Wie schon gesagt, habe ich ein Testprogrämmchen geschieben, das mit dieser dll wunderbar wie folgt arbeitet:

    __declspec(dllimport) int blah (struct_type * s);
    typedef struct {
    int a;
    int b;
    ...} struct_type; // das benutzende Programm muss den Typ natürlich auch kennen
    
    int main(){
    struct_type local_struct;
    int retval = blah( &local_struct );
    // jetzt kann mittels local_struct.a etc. auf die in der dll berechneten Werte zugegriffen werden.
    }
    

    Ok. Bis jetzt alles einfach. Jetzt habe ich aber ein in Visual C++ .NET (2003) geschiebenes Programm. Das kann die dll im Prinzip auch nutzen, ABER:

    Obwohl der Funktionsaufruf scheinbar wunderbar funktioniert, und auch andere per Parameter übergebene (Eingabe-) Parameter in der dll verwendbar sind, gehen alle Werte, die ich IN DER DLL in den struct reinschreibe, VERLOREN.

    Also in der dll

    int blah(struct_type * s){
    s->a = 0815;
    }
    

    kommt nicht in dem .NET-Programm an!

    BITTE HELFT MIR, ICH BIN VERZWEIFELT
    Danke im Voraus!



  • Wer ruft es denn auf??? Du redest irgendwas von ".NET"!? Wird es aus C# aufgerufen?
    Auch solte man IMHO das struct so definieren:

    typedef struct struct_type {
    int a;
    int b;
    ...};
    

    Aber das wird an dem Problem vermutlich nichts ändern...

    PS: Falls es doch C++ ist: Stimmt den das packing der Struktur? Ist es also in Deiner DLL gleich wie in dem aufrufenden Programm?



  • Jochen Kalmbach schrieb:

    Auch solte man IMHO das struct so definieren:

    typedef struct struct_type {
    int a;
    int b;
    ...};
    
    typedef struct struct_name {
    int a;
    int b;
    ...} struct_type;
    

    😉 :xmas2:



  • Wegen dieser totalen Verwirrung mache ich sogar immer:

    typedef struct StructName {
    int a;
    int b;
    ...} StructName;
    

    Da geht man jedem Problem aus dem Weg...

    Oder weist Du ohne nachzuschauen, was das folgende bedeutet?

    typedef struct
    {
       Name() {}
       int a;
       int b;
    } Name;
    

    Wird "Name()" jetzt als Konstruktor aufgerufen oder nicht?



  • Jochen Kalmbach schrieb:

    Wird "Name()" jetzt als Konstruktor aufgerufen oder nicht?

    nö, weil die struct keinen namen hat.
    überhaupt finde ich konstruktoren und methoden in structs blöd. dafür würde ich immer 'class' nehmen...
    :xmas2:



  • Warum nutzen Leute mit nem C++ Compiler überhaupt noch diese typedef-Variante vom Syntax her???

    Mit was für nem Compiler wurde die DLL denn erstellt?



  • Die Frage ist auch noch offen: WER verwendet die DLL WIE?


Anmelden zum Antworten