| |
Fortgeschrittene ProgrammierungBitte um Erläuterung (Byte verschiebung) | | | Autor: RapID23o5 | Datum: 05.01.07 21:10 |
| Hallo alle zusammen,
seit langem hab ich mal wieder etwas was mir den Kopf zerbricht und ich hoffe das mir vielleicht hier jemand etwas zu dem folgenden Code erklären könnte. Das schlimmste ist das ich den Code geschrieben habe, ihn allerdings selbst nicht wirklich verstehe.
Zwei, drei Auszüge aus dem Gesamtcode:
Public Type TW_MEMORY
Flags As Long
Length As Long
TheMem As Long
End Type
Public Type TW_IMAGEMEMXFER
Compression As Integer
BytesPerRow As Long
Columns As Long
Rows As Long
XOffset As Long
YOffset As Long
BytesWritten As Long
Memory As TW_MEMORY
End Type
'... Mehr als genug Code übersprungen...
lHandle = GlobalAlloc(GPTR, lBufLen)
tSetBuf.Memory.Flags = TWMF_APPOWNS Or TWMF_HANDLE
tSetBuf.Memory.Length = lBufLen
tSetBuf.Memory.TheMem = lHandle
'... Jetzt der Teil den ich nicht richtig verstehe:
MoveMemory ByVal (VarPtr(tSetBuf.Memory.Flags) + 2), _
ByVal VarPtr(tSetBuf.Memory.Length), _
(4 + Len(tSetBuf.Memory.TheMem) * 4&) Die Zielfunktion erwartet im Feld Memory.TheMem einen Zeiger auf einen Speicherbereich. Ohne die fragliche Zeile funktioniert die Übergabe an die Zielfunktion nicht! Aber wieso funktioniert es so und was passiert genau? Ich weiss das dort Bytes verschoben werden. Ich weiss auch das es Hi und LoWords gibt aber ich kann mir des alles nicht so gut vorstellen. Und wie herum liegen die Bytes im Speicher.
Danke schonmal für Antworten.
Ach, und frohes neues Jahr an alle.
by Rapid
Ohne Mampf, kein Kampf ! | |
Re: Bitte um Erläuterung (Byte verschiebung) | | | Autor: Gateway | Datum: 05.01.07 21:22 |
| Haßte das wirklich selbst geschrieben? Naja glauben wirs dir mal^^
Ich entnehme dam hier "Zielfunktion erwartet im Feld Memory.TheMem einen Zeiger auf einen Speicherbereich." und dem code das memory.themem also ein pointer ist.
ich weiß nicht ob du das so wolltest aber bei deinem movememory benutzt du ja die position der addresse (man verwirrend) im speicher, also nicht die addresse dessen auf was memory.themem zeigt. weiß nicht was du nun wolltest. Bei dieser Zeile:
MoveMemory ByVal (VarPtr(tSetBuf.Memory.Flags) + 2), _
ByVal VarPtr(tSetBuf.Memory.Length), _
(4 + Len(tSetBuf.Memory.TheMem) * 4&)
da ist len(tsetbuf.memory.themem) immer gleich 4, da ein long nunmal 4 lang ist, ich denk mal das haßt du nicht beabsichtigt, oder doch?
Im moment tut diese funktion folgendes:
sie verschiebt memory.lenght sowie memory.themem und die nächsten 12 zeichen (was auch immer das dann ist) an die hälfte von memory.flags.
Was soll diese funktion überhaupt tun? könntest du vll die ganze posten. einzelne fetzten sind nich so gut.
Wer Rechtschreibfehler findet kann sie behalten oder meinen Deutschlehrer verklagen.
In der Mitte von Schwierigkeiten liegen die M?glichkeiten. [Alber Einstein] | |
Re: Bitte um Erläuterung (Byte verschiebung) | | | Autor: Gateway | Datum: 06.01.07 12:25 |
| Ich weiß weder wie du auf einen solchen code kommst noch was er soll. Wenn ich ihn ausprobiere bekomme ich hinterher logischerweise ganz andere Werte in der Struktur. Diese Werte ergeben auch überhauptkeinen sinn mehr.
MoveMemory im zusammenhang mit high- und lowwords verstehe ich ja, aber bei dir werden nicht nur diese verschoben sondern teile von variablen in andere variablen. und das hat dann nix mehr mit High- und Lowwords zu tun. Wenn du das selbst geschrieben hast, wahrscheinlich schon lange her^^, dann erklär mir mal warum die fragliche zeile da steht.... Ich habe in meinem letzten post schon erklärt was movememory in deinem code bewirkt. und es ergibt keinen sinn. Vll wäre es nützlich mal den ganzen code zu posten und uns über genauere details aufzuklären. Ich weiß immernoch nicht wofür du diese struktur an was überhaupt übergibst. Und warum du die daten mit movememory bearbeitest. wenn die andere funktion die ausließt verstehe ich garnicht warum du die so merkwürdig verschiebst. Dann wüste ich noch gerne ob es im mom klappt und woran man das merkt.
Wer Rechtschreibfehler findet kann sie behalten oder meinen Deutschlehrer verklagen.
In der Mitte von Schwierigkeiten liegen die M?glichkeiten. [Alber Einstein] | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|