Gå til innhold

ein API returnerer et Reference av en structure..


Anbefalte innlegg

ein API returnerer et Reference av en structure, kossen kn eg bruka det?

dette e "c" koden:

usb_dev_handle *usb_open(struct usb_device *dev);

kossen kan eg bruka dette her i f.eks denne API'call'en:

Declare Function USB_Close Lib "libusb0.dll" (ByRef Device As USB_Dev_Handle) As Integer

 

:hmm::hmm:

Lenke til kommentar
Videoannonse
Annonse

En referense, eller handle om du vil, er ikke annet enn en adresse som peker til det aktuelle minneområdet. Denne adressen er normalt sett 32-bit, og lagres følgelig i en Long. Man kan med andre ord deklarere API-kallet slik:

 

Declare Function USB_Close Lib "libusb0.dll" (ByVal Device As Long) As Integer

 

usb_open, som denne funksjonen naturlig nok er tilknyttet med, returnerer en handle - usb_dev_handle, og det er denne du skal legge inn i Devices når du ønsker å kalle USB_Close.

 

Altså, hvis jeg ikke tar aldeles feil, kan man gjøre det hele på denne måten:

 

Dim hUSB As Long, dev As usb_device

' Gjør ett eller annet med 'dev' her

hUSB = usb_open(dev)

If hUSB > 0 Then
   ' Dersom alt gikk som det skulle, kan vi fortsette resten av operasjonen her
Else
   MsgBox "Error opening usbfs file: " & usb_strerror
End If

' Dealloker alle resurser brukt i operasjonen (eller hva annet som må til i opprydningsprosessen)
usb_close hUSB

 

Men jeg er imidlertid langt fra sikker på dette; jeg har aldri benyttet denne DLL-filen. Du må derfor bare prøve det ut, er jeg redd.

Lenke til kommentar

Tusen takk for svaret, det hjelpre meg virkelig

 

[EDIT]

Det såg ut som du kunne litt om dette(iallefall mer enn meg... :( )

men eg trenge litt hjelp te...

ka i all verden e size_t???(C++)

int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, size_t buflen);

eg har oversatt det te dette:

Declare Function USB_Get_String_Simple Lib "libusb0.dll" (ByRef hUSB As Long, ByVal Index As Long, ByRef Buf As Byte, ByVal BufLen As Long) As Long

 

og så ein te ting.. eg fant ein Reference te en voide i koden :( ...

int usb_get_descriptor(usb_dev_handle *udev, unsigned char type, unsigned char index, void *buf, int size);

som te nå e oversatt te:

Declare Function USB_Get_Descriptor Lib "libusb0.dll" (ByRef hUSB As Long, ByVal sType As Byte, ByVal Index As Byte, ByRef Buf As Long, ByVal Size As Long) As Long

Dette e jo garantert feil...(tippe eg)

eg fant og ein sånnen i ein structure/type

struct usb_device {
 struct usb_device *next, *prev;

 char filename[LIBUSB_PATH_MAX];

 struct usb_bus *bus;

 struct usb_device_descriptor descriptor;
 struct usb_config_descriptor *config;

 void *dev;        /* Darwin support */
};

dette e fram te nå oversatt te:

Type USB_Device
   Next As Long 'Reference
   Prev As Long 'Reference
   filename(LibUSB_Path_Max) As Byte
   Bus As Long 'Reference
   Descriptor As USB_Device_Descriptor
   Config As Long
End Type

någen ide?

Endret av Richard87
Lenke til kommentar

size_t er en datatype i C++ som er av typen unsigned long (et 32bit integer som ikke kan inneholde negative tall)(eller er det unsigned long long?)

void * betyr at det er en udefiner peker, byttes ut med Long.

 

Bytt ut "ByRef buf As Long" med "ByRef buf As String"

ByRef gir tilbake peker til API funksjonen, ByVal gir verdien.

Og før du skriver, setter du

Dim buf As String

buf = Space([Lengde])

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...