Notation dll Deklaration

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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: Notation dll Deklaration

Beitrag 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:
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Notation dll Deklaration

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag 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:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

...und das ein normales Byte signed ist, muss man auch erst mal "erfahren" :mrgreen:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Notation dll Deklaration

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag 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:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Notation dll Deklaration

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag 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:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Notation dll Deklaration

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag 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...
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Antworten