Hallo Forum,
ich habe eine DLL zu schreiben, welche die zu verarbeitenden Daten als Zeiger auf eine Struktur übergeben bekommt.
Die Struktur sieht in abgespeckter Form etwa so aus:
Long Wert1
bool Wert2
Long Wert3
usw...
Leider kann ich die Struktur nicht direkt mit PB verarbeiten, da so weit mir bekannt ist, PB keine BOOL, als 1-Bit-Variablen kennt.
Habt Ihr eine Lösung für mein Problem?
Vielen Dank schon mal.
Gruß
Bit Variable
- 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
Es gibt keine 1-Bit Variablen!
Bool ist entweder Byte oder Long (je nach Sprache)
Variablentypen kleiner Long machen nur in Strukturen Sinn, da ansonsten
sowieso kein Speicher gespart wird, z.B. Procedure.b ist eigentlich blödsinn.
Eigentlich werden sie nur für API-Strukturen benötigt und zur
Kommunikation mit Schnittstellen wie z.B. RS232.
Gruß
Thomas
Bool ist entweder Byte oder Long (je nach Sprache)
Variablentypen kleiner Long machen nur in Strukturen Sinn, da ansonsten
sowieso kein Speicher gespart wird, z.B. Procedure.b ist eigentlich blödsinn.
Eigentlich werden sie nur für API-Strukturen benötigt und zur
Kommunikation mit Schnittstellen wie z.B. RS232.
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: Bit Variable
Welche Sprache denn?Chris_Bayern hat geschrieben:Die Struktur sieht in abgespeckter Form etwa so aus:
Long Wert1
bool Wert2
Long Wert3
usw...
Bei Gnu C++ ist das bool z.B. 1 Byte groß, wird aber in einer Struktur
oft auf 32bit o.ä. aufgefüllt, um die nachstenden Daten wieder an einer
entsprechenden Speichergrenze auszurichten (alignment).
Beispiel:
Code: Alles auswählen
#include <iostream>
struct xyz {
int x;
bool Wert2;
int y;
};
int main (int argc, char *argv[]) {
std::cout << sizeof(xyz) << std::endl;
return(0);
}
raus, ergibt es 1.
Bei WinAPI 'BOOL' dürfte es das Gleiche sein.
Aufpassen muß man dann halt wenn mehrere bool nacheinander
vorkommen:
Code: Alles auswählen
struct xyz {
int Wert1;
bool Wert2;
bool Wert3;
bool Wert4;
int Wert5;
};
Eine genaue Antwort gibt es also nicht, hängt alles von der kompletten
Struktur und der Platform (16/32/64bit) ab.
Wenn in einem Code direkt ein bool verwendet wird, dann kann das
ein Compiler intern auch auf 32/64bit optimieren, um den Zugriff evtl.
zu beschleunigen. Das kann jeder machen wie er will, wenns intern ist.
In Strukturen macht es halt Sinn das es alle gleich machen, um z.B. mit
WinAPI was auszutauschen.
Dein Beispiel könnte dann so in PB aussehen:
Code: Alles auswählen
Structure xyz
Wert1.l
Wert2.b
__fill.b[3]
Wert3.l
EndStructure
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
- Beiträge: 5
- Registriert: 16.10.2005 16:09
- Wohnort: Bayern
In C/C++ gibt es aber ein Feature das man Bit-Feld nennt.ts-soft hat geschrieben:Es gibt keine 1-Bit Variablen!
Code: Alles auswählen
struct xyz {
unsigned Wert1: 1; // 1 Bit
unsigned Wert2: 2; // 2 Bits
unsigned Wert3: 1; // 1 Bit
unsigned Wert4: 12; // 12 Bits
};

cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck