Xpprt2.ch
Zur Navigation springen
Zur Suche springen
Allgemeines
Solange man mit den Standard-Datentypen von Xbase++ auf Windows-APIs zugreifen kann, mappt die Laufzeitumgebung von Xbase++ das sehr gut und zuverlässig.
Probleme treten aber auf, wenn komplexere Strukturen benötigt werden, also z.B. Strukturen. Hier muss man entweder auf die BAP.dll oder OT4XB zurückgreifen.
Oder, man verwendet eine zu diesem Zeitpunkt undokumentierte Header-Datei, die solche Zugriff ermöglicht.
Syntax
typedef struct { UINT _nSize; UINT_PTR _nUserParam; LPCSTR _pszProjectFileName; LPCSTR _pszOriginalProjectFileName; UINT _nPages; // 0 for 'unlimited' UINT _nFunction; HWND _hWnd; HANDLE _hEvent; LPCSTR _pszExportFormat; BOOL _bWithoutDialog; } scLlDesignerPrintJobA;
Beispiel
Umsetzung in Xbase++ Syntax (mit xpprt2.ch):
DEFINE STRUCTURE LLDesignerPrintJob VAR _nSize AS UINTEGER VAR _nUserParam AS UINTEGER VAR _pszProjectName AS @STRING VAR _pszOriginalProjectFileName AS @STRING VAR _nPages AS UINTEGER VAR _nFunction AS UINTEGER VAR _hWnd AS UINTEGER VAR _hEvent AS UINTEGER VAR _pszExportFormat AS @STRING VAR _bWithoutDialog AS UINTEGER ENDDEFINE
Das Result ist eine Klasse, die jedoch über verschiedene Methoden verfügt, um Daten in die Struktur zu schreiben oder aus ihr zu lesen:
oCallback := LLDesignerPrintJob():New(pointer) oCallback:_pszExportFormatFromVar() // löst pointer auf String auf !! // für jedes Char-Element gibt es eine *FromVar Methode // es gibt sogar *ToVar // Numerische Werte mit get/set: oCallback:get_hevent() oCallback:set_hevent(5)
Oder auch direkt auf diesem Weg:
oCallbak:_pszOriginalProjectFileNametovar("Hello World")
Quelle
#include "xpprt2.ch" Dank an Marcus Herz für diesen tollen Beitrag.