Seite 1 von 6

Notation dll Deklaration

Verfasst: 10.11.2009 14:59
von six1
Hallo,
per Zufall bin ich auf PurBasic gestoßen und habe mir die Vollversion mal zugelegt.
Normalerweise programmiere ich in Delphi oder Microcontroller in C oder in Bascom.

Die Möglichkeit mit PureBasic verschiedene Betriebssysteme zu unterstützen hat mich sehr neugierig gemacht.

Ich möchte nun gerne eine vorhandene dll in ein kleines PB Projekt einbinden.

Das Einbinden der dll bereitet mir keine Probleme.

Die Zeile für eine Funktion der dll in Delphi sieht folgendermaßen aus:

Code: Alles auswählen

function DoGetInfraCode(var TimeCodeDiagram:Array of byte; var DiagramLength:integer):integer;  stdcall external DLLPath name 'DoGetInfraCode';
Wie müsste ich diese Zeile für PB anpassen? Hier interessiert mich natürlich sehr, wie das Array of Byte übersetzt wird :mrgreen:

Gruß, Michael

Re: Notation dll Deklaration

Verfasst: 10.11.2009 15:15
von Kaeru Gaman
Moin Moin und Willkommen an Board!

Da ich von Delphi keine Scheckung hab, kann ich nur raten.
Die Länge des Tables wird mit angegeben, also würde ich mal schätzen, dass es sich beim ersten Parameter um einen Pointer zu der Tabelle handelt.
da bin ich mir ziemlich sicher.

also würde ich mal vermuten, der Import müßte so aussehen:

Code: Alles auswählen

Import "MyLibName.dll"
  DoGetInfraCode.l (*TimeCodeDiagram.b, DiagramLength.l )
EndImport
kann mich aber auch verhaun haben, Imports sind nicht gerade mein Fachgebiet... :mrgreen:

Re: Notation dll Deklaration

Verfasst: 10.11.2009 15:23
von Rings
das array von Bytes, ist einfach ein Zeiger auf einen Speicherbereich
wo die daten liegen, Die Länge ist im zweiten Parameter gegeben.
ALs Parameter für das Bytearray also einen 32bit wert Zeiger auf das array
nehmen (.l)

Re: Notation dll Deklaration

Verfasst: 10.11.2009 16:26
von six1
Hey, das ging ja fix :D vielen Dank!

Also, sieht ganz gut aus... bis jetzt. Ich muss aber ziemlich viel deklarieren, um die volle Funktion der dll zu haben.

Wenn ich's fertig habe, setze ich es hier rein.
Es geht im Grunde darum, dass man Atmel Microcontroller (Tiny2313 und Mega8) als USB Controller benutzen kann. Diese bieten dann, ja nach verwendetem Typ, parallele und serielle Anschlüsse an.

Praktisch gesehen: Man könnte ein LCD Display mit einem kleinen Tiny verbinden und über den Krempel, den ich gerade umsetze, über USB was auf das Display schreiben...

oder tausend andere Dinge :mrgreen:


so, gehe noch ein bisschen hacken...

Re: Notation dll Deklaration

Verfasst: 10.11.2009 17:04
von H.Brill
Wäre echt klasse.
Hab nämlich auch Atmels und ein
Experimentierboard und noch anderes
(Easy Radio usw.).

PS: stdcall für Delphi sieht schon mal
gut aus. Probiers doch mal gleich mit
einem Byte - Array
Dim MyArray.b(anzahl) und übergebe
es mal mit @MyArray() der Funktion.
Hat bei mir schon bei anderen DLLs
als Übergabe von Speicherbereich geklappt.

Re: Notation dll Deklaration

Verfasst: 10.11.2009 17:33
von six1
unter Delphi habe ich das alles am rennen.
Ich muss mich erst wieder an den Dialekt von PB gewöhnen :mrgreen: wird wieder alles etwas anders geschrieben...

Wobei ich aber auch etwas verwöhnt bin in Bezug auf die Application Erstellung! Das geht mit Delphi "etwas" eleganter. :)

btw, wie kommentiert man mehrere Zeilen auf einmal aus?
also sowas: /*...*/ oder {...} oder '{...'} hach, man hat's schon schwer :lol:

Gruß, Michael

Re: Notation dll Deklaration

Verfasst: 10.11.2009 17:48
von Kiffi
six1 hat geschrieben:btw, wie kommentiert man mehrere Zeilen auf einmal aus?
'Auskommentieren': Zeilen markieren -> Ctrl + B

'Einkommentieren': Zeilen markieren -> Alt + B

Grüße ... Kiffi

Re: Notation dll Deklaration

Verfasst: 10.11.2009 17:51
von PMV
Kaeru Gaman hat geschrieben:

Code: Alles auswählen

Import "MyLibName.dll"
  DoGetInfraCode.l (*TimeCodeDiagram.b, DiagramLength.l )
EndImport
:?
Kaeru! *.b ... also ... :bluescreen:

:wink:

MFG PMV

Re: Notation dll Deklaration

Verfasst: 10.11.2009 18:46
von six1
Fragen über Fragen:

1) gibt es so etwas wie einen Timer? (zeitlich einstellbaren Event) unter "Timer" oder "Clock" habe ich sowas nicht gefunden. Ich glaube doch nicht, dass man sowas über gettickcount zusammen basteln muss, oder? :shock:

2) kann man eine Komponente "finden" über Angabe des Namen als String. in Delphi gibt es eine Funktion findcomponent('Name der Komponente' as TLabel) z.B.
Wichtig hierbei wäre für mich z.B. die enumeration von 8 Button, welche im Prinzip jeweils einem Bit eines Byte zugeordnet sind.
z.B. #Button_a_0, #Button_a_1 ...
danach so etwas wie

for x := 0 to 7 do begin
(findcomponent('Button_a_' + inttostr(x)) as TButton).toggle := port_a_byte and (1 shl x);
end;

...wobei es keine Eigenschaft "toggle" bei den Delphi Komponenten gibt :D

oder wie macht man das "schön" in PB??? :lurk:

...wenn so Fragen nerven, dann sagt das!

Re: Notation dll Deklaration

Verfasst: 10.11.2009 19:12
von Kaeru Gaman
PMV hat geschrieben:
Kaeru Gaman hat geschrieben:

Code: Alles auswählen

Import "MyLibName.dll"
  DoGetInfraCode.l (*TimeCodeDiagram.b, DiagramLength.l )
EndImport
:?
Kaeru! *.b ... also ... :bluescreen:

:wink:

MFG PMV
äh.. ja.. die struct also
*TimeCodeDiagram.Byte

aber wie gesagt, von Imports versteh ich nich so viel, das ist die Deklaration des Pointers, ob die so in die Deklaration des Aufrufs reingehört weiß ich nicht.