DLL einbinden VB6

OP #5081032
Lesenswert?

Hallo Zusammen,

ich bin noch ziemlicher Anfänger mit VB6 und gerade dabei eine externe 
Dll einzubinden über Delcare Function....

Jetzt habe ich folgendes Problem wie kann ich folgenden Structur in VB6 
abbilden (Beispiel stammt aus VB.net2005)?
1
 Public Structure LND_NOTIFICATION
2
        Dim type As UShort
3

4
        ''            union
5
        ''          {
6
        ''            struct
7
        ''          {
8
        ''            PDLN_CALLBACK function;
9
        ''            void *context;
10
        ''          } callback;
11
        ''#ifdef WIN32
12
        ''        HANDLE event;
13
        ''       struct
14
        ''        {
15
        ''            HWND handle;
16
        ''            UINT message;
17
        ''        } windowMessage;
18
        ''        struct
19
        ''        {
20
        ''           DWORD thread;
21
        ''            UINT message;
22
        ''        } threadMessage;
23
        ''#endif // WIN32
24
        ''          uint8_t reserved[64];
25
        ''    };
26

27
    End Structure
Gast #5081256
Lesenswert?

Robert C. schrieb:
> Geh mal auf "www.pinvoke.net" und such nach dem Namen deine API.
> Da sind dann die Konvertierungen gelistet.

Ja, für .NET, der TO will aber VB6.

@Matze
> Beispiel stammt aus VB.net2005

Na ja, das ist wohl eher auskommentierter C-Code mit 3 Zeilen VB.

Struktur in VB6 (zumindest ein einfaches Beispiel):
https://msdn.microsoft.com/de-de/library/030kb3e9(v=vs.90).aspx

Vielleicht auch nützlich (ähnliche Frage):
http://www.vbforums.com/showthread.php?505818-RESOLVED-C-Structures-Unions-and-Pointers-in-VB6
#5081262
Lesenswert?

Es geht wohl um die struct aus dem header:
https://github.com/PISCES-HI/rover-onboard/blob/master/thirdparty/include/dln/dln_generic.h

da ist das Problem, dass du in der Struktur 64 Byte freihalten musst, 
gleichzeitig aber die ersten 8 dieser 64 Byte als struktur 
interpretieren. Würde das so machen:
1
Private Type DLN_container
2
    _type As Integer
3
    data(64) As Byte
4
End Type
5

6
Private Type DLN_message
7
    handle As Long
8
    message As Long
9
End Type

Dann der Funktion einen DLN_container übergeben, damit auf jeden Fall 
genug Speicher allokiert ist. Anschließend
1
Dim msg As DLN_message
2
LSet msg = container.data

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren