Xpprt2.ch

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
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.