Xpprt2.ch: Unterschied zwischen den Versionen

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „__FORCETOC__ == Allgemeines == Solange man mit den Standard-Datentypen von Xbase++ auf Windows-APIs zugreifen kann, mappt die Laufzeitumgebung von Xbase++ da…“)
 
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 11: Zeile 11:


== Syntax ==
== 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;




Zeile 16: Zeile 30:
== Beispiel ==
== 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 ==
== Quelle ==


[https://www.xbaseforum.de/viewtopic.php?f=27&p=137925#p137925 #include "xpprt2.ch"] Dank an Marcus Herz für diesen tollen Beitrag.
[https://www.xbaseforum.de/viewtopic.php?f=27&p=137925#p137925 #include "xpprt2.ch"] Dank an Marcus Herz für diesen tollen Beitrag.

Aktuelle Version vom 4. März 2021, 14:29 Uhr


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.