Pointers
Übersicht BlitzBasic DLLs und Userlibs
DAKBetreff: Pointers |
Mi, Jul 09, 2014 20:09 Antworten mit Zitat |
|
---|---|---|
Diese Userlib erlaubt die Verwendung von Int-, Float- und String-Pointern in Blitz, wenn auch leider nur eher rudimentär.
Die folgenden Funktionen werden unterstützt: Code: [AUSKLAPPEN] pointers_getPointer%( obj* )
Hiermit bekommt man einen Pointer auf ein beliebiges Type-Objekt. Das wird benötigt, um den Rest der Befehle verwenden zu können. Der Pointer zeigt auf das erste Feld im Type. Will man einen Pointer haben, der auf das zweite Feld zeigt, muss man diesen Pointer mit 4 addieren. Für jedes weitere Feld muss wieder 4 dazu addiert werden. pointers_getInt%( ptr% ) pointers_getFloat#( ptr% ) pointers_getString$( ptr% ) Diese Befehle geben den Wert zurück, der sich an der Stelle des gegebenen Pointers befindet. Achtung: getString ist nicht sicher, das heißt, an der Stelle, wo ptr% hin zeigt, muss sich auch wirklich ein String in dem Type befinden, sonst kann das Programm abstürzen! pointers_setInt( ptr%, val% ) pointers_setFloat( ptr%, val# ) pointers_setString( ptr%, val$ ) Diese Befehle setzen den Wert der Variable, die sich an der Stelle des gegebenen Pointers befindet, auf den gegebenen Wert. Achtung: Alle diese Befehle sind nicht sicher, das heißt, an der Stelle wo ptr% hin zeigt, muss sich auch wirklich ein Wert des gegebenen Typs befinden (Int / Float / String), sonst kann das Programm abstürzen! Wer nicht weis, was Pointer sind, sollte wohl besser die Finger davon lassen, da man sich das Debuggen damit unheimlich schwer machen kann. Für alle anderen: Viel Spaß damit. Hier noch mal der Source-Code: pointers.bb BlitzBasic: [AUSKLAPPEN] ;Author: David Krywult pointers.decls Code: [AUSKLAPPEN] .lib "pointersDll.dll"
pointers_getInt%( ptr% ):"_getIntFromPointer@4" pointers_getFloat#( ptr% ):"_getFloatFromPointer@4" pointers_getString$( ptr% ) pointers_setInt( ptr%, val% ):"_setIntFromPointer@8" pointers_setFloat( ptr%, val# ):"_setFloatFromPointer@8" pointers_setString( ptr%, val$ ) pointers_getPointer%( obj* ):"_getPointer@4" pointersDLL.h Code: [AUSKLAPPEN] #ifdef POINTERSDLL_EXPORTS #define POINTERSDLL_API extern "C" __declspec(dllexport) #else #define POINTERSDLL_API __declspec(dllimport) #endif POINTERSDLL_API int __stdcall getIntFromPointer(int ptr); POINTERSDLL_API float __stdcall getFloatFromPointer(int ptr); POINTERSDLL_API void __stdcall setIntFromPointer(int ptr, int val); POINTERSDLL_API void __stdcall setFloatFromPointer(int ptr, float val); POINTERSDLL_API int __stdcall getPointer(void* ptr); pointersDLL.cpp Code: [AUSKLAPPEN] #include "stdafx.h"
#include "pointersDll.h" POINTERSDLL_API int __stdcall getIntFromPointer(int ptr) { return *((int*)(ptr)); } POINTERSDLL_API float __stdcall getFloatFromPointer(int ptr) { return *((float*)(ptr)); } POINTERSDLL_API void __stdcall setIntFromPointer(int ptr, int val) { *((int*)ptr) = val; } POINTERSDLL_API void __stdcall setFloatFromPointer(int ptr, float val) { *((float*)ptr) = val; } POINTERSDLL_API int __stdcall getPointer(void* ptr) { return (int)ptr; } Download Update 11.07.2014: -) Memory-Leak entfernt, pointers_purgeStores() ist damit obsolet und wurde entfernt. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht BlitzBasic DLLs und Userlibs
Powered by phpBB © 2001 - 2006, phpBB Group