Richard87 Skrevet 15. januar 2005 Del Skrevet 15. januar 2005 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 Lenke til kommentar
aadnk Skrevet 15. januar 2005 Del Skrevet 15. januar 2005 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
Richard87 Skrevet 15. januar 2005 Forfatter Del Skrevet 15. januar 2005 (endret) 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 15. januar 2005 av Richard87 Lenke til kommentar
GeirGrusom Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå