Delphi DLL
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Delphi DLL
@edel
Die macht aber nichts anderes, als mein erster Vorschlag, ausser das ich Integer verwendet habe,
was in diesem Falle ja unerheblich ist.
Die macht aber nichts anderes, als mein erster Vorschlag, ausser das ich Integer verwendet habe,
was in diesem Falle ja unerheblich ist.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Delphi DLL
besser ist esedel hat geschrieben:![]()

Auf dem ersten Blick wohl nicht sofort erkennbar

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 87
- Registriert: 28.11.2010 13:07
- Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
- Wohnort: Germany
- Kontaktdaten:
Re: Delphi DLL
Nur um die Verwirrung zu komplimentieren,
ich hatte schon das Vergnügen mit PB DLL's für Delphi zu schreiben.
Grüsse
Joshy
Und ein "echter" Delphi String sieht so aus.
ich hatte schon das Vergnügen mit PB DLL's für Delphi zu schreiben.
Grüsse
Joshy
Und ein "echter" Delphi String sieht so aus.
Code: Alles auswählen
Structure DELPHISTRING
RefCounter.l
StringSize.l
*pChars
EndStructure
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Re: Delphi DLL

Also heissen Dank für Eure Hilfe bis hierher. Ich würde ja jetzt auch gerne so etwas sagen wie : "juhu es läuft", doch dazu brauchts wohl noch ein bisschen gefummel.
Ich verstehe das einfach nicht...
1. Ich komme nicht dahinter, wieso VB-declarationen mit String auskommen und andereseit in der Doku von einem String mit 4Byte-Längenangabe die Rede ist. Ich ignoriere das jetzt mal...

2. Will die DLL jeztz nun einen Zeiger auf meine Selbstgebauten Strings, oder schaffe ich es doch, eben diesen String ohne das er eingekürzt wird (wegen den NULLEN in der Längenangabe) zu übergeben?
Hoffentlich sitzt das Problem vor dem Rechner...
...Ungültiger Speicherzugriff.(Lesefehler an der Adresse ....)
Hier der letzte Versuch und Stand meiner Bemühungen:
Grüße Galahat
Code: Alles auswählen
Prototype.u USB32IO_OpenDevice(Par1.c, Par2.s, Par3.s, Par4.s)
Prototype USB32IO_CloseDevice(Par1.c)
;Funktionspointer
Global OpenDevice.USB32IO_OpenDevice
Global CloseDevice.USB32IO_CloseDevice
Define.i hdll= OpenLibrary(#PB_Any,"USB32IO.dll")
If hdll
OpenDevice = GetFunction(hdll, "OpenDevice")
Else
MessageRequester("Error","Library Error")
EndIf
;#####################################################################################
Global DeviceNumber.c ;0 bis 31
Global Devnum.c
Global DeviceError.i
Global DeviceID.u ;die auf der Karte gespeicherte ID 1024
Global CardID.u
Global *pTreiber.l
Global *pa.l
Global *pb.l
Global s1.s
Global s2.s
Global s3.s
Procedure ConvertStringToPascalDLL(AnsiString.s)
Protected len
Protected *mem.long
len = Len(AnsiString)
*mem = AllocateMemory(len + 5)
If *mem
PokeS(*mem + SizeOf(long), AnsiString)
*mem\l = len
ProcedureReturn *mem
EndIf
EndProcedure
*pTreiber = ConvertStringToPascalDLL("EZUSB")
*pa = ConvertStringToPascalDLL("")
*pb = ConvertStringToPascalDLL("")
s1=PeekS(*pTreiber,20)
s2=PeekS(*pa,20)
s3=PeekS(*pb,20)
FreeMemory(*pTreiber)
FreeMemory(*pa)
FreeMemory(*pb)
DeviceNumber = 255 ;ungültige DeviceNumber als Initialisierung
CardID = 1024 + 20 ; Kartenkennung + Kartennummer
Devnum = 20
DeviceID= OpenDevice(Devnum,s1,s2,s3)
If CardID = DeviceID
MessageRequester("Gefunden",Str(DeviceID))
EndIf
CloseDevice(Devnum)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Delphi DLL
Der Prototype wird eher so:
aussehen. Ganzzahlige Rückgaben, <= Integer werden auch so übergeben und nicht mit einem
kleinerem Typ. Dasselbe für den ersten Parameter. Und die anderen 3 sind in jedem Falle
Pointer zu dem String mit davorgebastelter Länge, siehe Beispiel edel oder meins, evtl. noch mit
vorgebasteltem Referencezähler (siehe D.J. Joshy)?
Gruß
Thomas
Code: Alles auswählen
Prototype USB32IO_OpenDevice(Par1, *Par2, *Par3, *Par4)
kleinerem Typ. Dasselbe für den ersten Parameter. Und die anderen 3 sind in jedem Falle
Pointer zu dem String mit davorgebastelter Länge, siehe Beispiel edel oder meins, evtl. noch mit
vorgebasteltem Referencezähler (siehe D.J. Joshy)?
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Delphi DLL
so
Ich hab probiert die Prozedur umzufrickeln um dem Aufbau mit "Referenzzähler" etwas näher zu kommen.
Ich weiß nur nicht..muss der auf null oder..
Galahat

Ich hab probiert die Prozedur umzufrickeln um dem Aufbau mit "Referenzzähler" etwas näher zu kommen.
Ich weiß nur nicht..muss der auf null oder..
Code: Alles auswählen
Procedure ConvertStringToDelphi(AnsiString.s)
Protected len
Protected *mem.l
len = Len(AnsiString)
*mem = AllocateMemory(len + 9)
If *mem
PokeS(*mem + SizeOf(long)+SizeOf(long), AnsiString)
PokeL(*mem + SizeOf(long),len)
PokeL(*mem,0) ;<----------------------------------------oder PokeL(*mem,[Longvar=0])
ProcedureReturn *mem
EndIf
EndProcedure

Galahat
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Delphi DLL
Setz den Referenzzähler am besten auf -1 (konstanter String).
Ansonsten sollte Deine Procedure in Ordnung sein, vorausgesetzt Dein Code läuft im ASCII-Compilermode.
Gruß
Thomas
Ansonsten sollte Deine Procedure in Ordnung sein, vorausgesetzt Dein Code läuft im ASCII-Compilermode.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Delphi DLL
Danke dir
, aber das isses auch noch nicht
.
Der Hund bleibt immer bei DeviceID= OpenDevice(Devnum,*pTreiber,*pa,*pb) stehen und meldet :
Ungültiger speicherzugriff
Lesefehler an blablabla.
mmh
Ich schmeiß das ding gleich vorm Schneepflug


Der Hund bleibt immer bei DeviceID= OpenDevice(Devnum,*pTreiber,*pa,*pb) stehen und meldet :
Ungültiger speicherzugriff

mmh
Ich schmeiß das ding gleich vorm Schneepflug