Seite 4 von 6

Re: Notation dll Deklaration

Verfasst: 11.11.2009 22:42
von ts-soft
six1 hat geschrieben: :mrgreen: aber in meinem Delphi Programm muss ich auch keine Pointer übergeben, wenn ich die Ports abfrage... in PB schon :lol: und jetzt? :shock:
Das @ vor dem Array kannste Dir in PB auch sparen, wird sowieso als Pointer übergeben :mrgreen:
und jetzt? :mrgreen:

Re: Notation dll Deklaration

Verfasst: 12.11.2009 00:59
von mk-soft
Hi six1,

auch von mir Herzlich Willkommen im Forum.

Das mit den Zeiger (Pointer) oder sogar Zeiger auf einen Zeiger ist manchmal etwas verwirrend. Ist bei Purebasic etwas an 'C' angelehnt.
Ein Zeiger anlegen ist z.B. "Global *Zeiger". Dann kann man sogar einen Zeiger auf Zeiger übergeben FunctionXYZ(@*Zeiger, ...), usw...

An besten mal bei Freak http://freak.purearea.net/ unter Help das "Pointer Tutorial" mal anschauen.

Alles Gute
Michael

Re: Notation dll Deklaration

Verfasst: 12.11.2009 11:34
von six1
Boahh, voll drauf rein gefallen :mrgreen:

Delphi Deklaration:

Code: Alles auswählen

function DoGetRS232Buffer(var RS232Buffer:array of byte; var RS232BufferLength:integer):integer; stdcall external AVR309DLL name 'DoGetRS232Buffer';
C Deklaration:

Code: Alles auswählen

int __stdcall DoGetRS232Buffer(uchar * RS232Buffer, int DummyInt, int * RS232BufferLength);
ich habe also gedacht, mach ich mal den "dummy.l" mit rein und siehe da :bounce:

kaum macht man es richtig, schon geht's :lol:

Re: Notation dll Deklaration

Verfasst: 12.11.2009 19:28
von six1
...und das ein normales Byte signed ist, muss man auch erst mal "erfahren" :mrgreen:

Re: Notation dll Deklaration

Verfasst: 12.11.2009 20:20
von Kaeru Gaman
das kannst du übrigens unsigned interpretieren, indem du es mit $FF ANDest und in einen größeren Container packst:

Code: Alles auswählen

a.b = 222

b.l = a & $FF

Debug a
Debug b

Re: Notation dll Deklaration

Verfasst: 12.11.2009 20:29
von six1
mit anderen Worten: wenn man ein signed in eine unsigned Variable übergibt, wird der Wert unsigned übernommen?

lustige Fallstricke :mrgreen:

Ich hatte nur gemerkt, wenn ich Bit.7 eines Port setze, dass alle Pin's des Port auf 1 gehen...
das war dann der Zeitpunkt, mal in die Hilfe zu schauen... machen ja nur Weicheier :lol: :lol: :lol:

Re: Notation dll Deklaration

Verfasst: 12.11.2009 20:40
von Kaeru Gaman
wenn man ein signed in eine unsigned Variable übergibt, wird der Wert unsigned übernommen?
nein.

1. es gibt keine unsigned variablen in PB, außer die, die für Char-Manipulation gemacht sind.
also nur .a für ascii und .u für unicode, und .c was je nach verwendetem stringsystem eines der beiden ist.

2. das simple überführen in einen größeren Container würde logischer Weise auch nicht das Vorzeichen eliminieren, sonst wär das ja Müll.

Code: Alles auswählen

a.b = 222
Debug a
b.l = a
Debug b
das Vorzeichen bleibt erhalten, es wird von Bit7 auf Bit31 verlegt.

aber
die ausführung von & $FF bei Byte bzw. & $FFFF bei Word oder & $FFFFFFFF bei Long ermittelt den Wert vorzeichenlos im betroffenen Register.
Dann kann man ihn in einen größeren Container packen, damit das Ex-Vorzeichenbit auch weiterhin als Wertebit interpretiert werden kann.

Re: Notation dll Deklaration

Verfasst: 12.11.2009 20:47
von six1
:mrgreen: ok, zweiter Anlauf:

mein Problem war der Wert $ff im Byte. Hier zeigt das msb den negativen Wert an. Wenn also b.7 gesetzt ist, dann wird bei Übergabe in eine "größere" Variable lediglich deren msb gesetzt... klar

ich hatte einfach erwartet, dass 255 rein gehen, wo 255 drauf steht :lol:
Ich programmiere viel 8-Bit Microcotroller, da ist die Sache ganz klar. Die mögen unsigned Byte Werte :mrgreen:

Re: Notation dll Deklaration

Verfasst: 12.11.2009 20:58
von Kaeru Gaman
es gehen natürlich 255 rein, nur du bekommst sie nicht angezeigt, wenn du sie von Byte aus in Text umwandeln läßt.
(jede Ausgabe ist ja eine Umwandlung in einen String)
du kannst im Grunde ganz normal rumdaddeln als wären die Variablen unsigned, nur bei Ausgabe oder Vergleichen muss man dran denken dass sie signed sind.

Re: Notation dll Deklaration

Verfasst: 12.11.2009 21:07
von six1
:mrgreen: 1 << 7 ergibt aber $ff und das ist dann nicht ganz egal. Wenn ich nach bit operationen das Byte übergebe und auf einmal alle Port Pin's angehen...