Beispielprogramm in Visual Objects

 

 

/************************************************************************/

/*                  Beispielprogramm in Visual Objects                  */

/*                                                                      */

/*                  Autor: Killet GeoSoftware Ing.-GbR                  */

/*                                                                      */

/*    VO Demonstrationsprogramm zum Einbinden von GeoDLL-Funktionen     */

/*                                                                      */

/*  Im Aufrufverzeichnis des Programms müssen die Dateien geodll32.dll  */

/*                   und geodllbn.bin vorhanden sein.                   */

/************************************************************************/

 

FUNCTION Start()

// Programm zum Testen einiger Funktionen aus der Dynamic Link Library

// GeoDLL von Killet GeoSoftware Ing.-GbR. Um das Programm

// lauffähig zu machen, müssen noch die Prototypen der DLL-Funktionen

// aus den Funktionsbeschreibungen des Handbuchs GeoDLL_d.chm übernommen

// werden.

 

// Variabeln:

LOCAL nKoordXQ,nKoordYQ,nKoordXZ,nKoordYZ,nStrecke AS REAL8

LOCAL nHalbAchsGrQ,nHalbAchsKlQ,nHalbAchsGrZ,nHalbAchsKlZ,nVerschX,;

      nVerschY,nVerschZ,nDrehungX,nDrehungY,nDrehungZ,nMasstab AS REAL8

LOCAL nEllipsoid,nKoordSysQ,nKoordSysZ,wBezSysQ,wBezSysZ,nStreifen,;

      nNotationQ,nNotationZ,wCoordSys AS WORD

LOCAL pszKoordQ,pszKoordZ,pszKoordZ2,pszText AS PSZ

LOCAL l AS LOGIC

 

// Zum Testen: Wenn die drei Zeilen nicht auskommentiert sind, verwaltet

// das Testprogramm selbstständig den Speicher für die von der GeoDLL

// zurückgegebenen Strings. Andernfalls wird die Speicherverwaltung

// innerhalb der DLL durchgeführt.

setstringallocate(FALSE)

pszText := MemAlloc(1000)

pszKoordZ := MemAlloc(20)

 

// Hinweis.

? "Drücken sie eine Taste um schnell fortzufahren!"

?

 

// Test der DLL-Funktion setunlockcode() durchführen.

// Die Freischaltschlüssel stimmen natürlich nicht!

// Sie müssen bei Killet GeoSoftware Ing.-GbR erworben werden!

// Vollversion: Der Freischaltschlüssel muss bei der 1. Eingabe stimmen!

// Testversion: Die Funktion darf nicht aufgerufen werden!

// Die Testversion funktioniert pro Programmlauf kurze Zeit ohne

// Freischaltung!

 

*? "Freischaltungen:"

*l := setunlockcode(string2psz("123456789-987654321"),;

*                   string2Psz("MicroModia GmbH"))

*? "setunlockcode():"

*if l

*  ? "Gruppe 'Koordinatentransformationen': frei geschaltet!"

*else

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*endif

 

*l := setunlockcode(string2psz("234567890-0987654332"),;

*                   string2psz("MicroModia GmbH"))

*? "setunlockcode():"

*IF l

*  ? "Gruppe 'Benutzerdefinitionen': frei geschaltet!"

*ELSE

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*ENDIF

 

*l := setunlockcode(string2psz("345678901-109876543"),;

*                   string2psz("MicroModia GmbH"))

*? "setunlockcode():"

*if l

*  ? "Gruppe 'Entfernungsberechnungen': frei geschaltet!"

*else

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*endif

 

*l := setunlockcode(string2psz("456789012-210987654"),;

*                   string2psz("MicroModia GmbH"))

*? "setunlockcode():"

*if l

*  ? "Gruppe 'Parameterermittlung': frei geschaltet!"

*else

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*endif

 

*l := setunlockcode(string2psz("567890123-321098765"),;

*                   string2psz("MicroModia GmbH"))

*? "setunlockcode():"

*if l

*  ? "Gruppe 'Notationsberechnungen': frei geschaltet!"

*else

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*endif

 

*l := setunlockcode(string2psz("678901234-432109876"),;

*                   string2psz("MicroModia GmbH"))

*? "setunlockcode():"

*if l

*  ? "Gruppe 'Kartenberechnungen': frei geschaltet!"

*else

*  geterrorcode(@pszText)

*  ? Psz2String(pszText)

*endif

*?

 

// Test der DLL-Funktion getdllversion() durchführen.

getdllversion(@pszText)

? "getdllversion():"

? "DLL-Version:", Psz2String(pszText)

?

inkey(3)

 

// Test der DLL-Funktion getauthor() durchführen.

getauthor(@pszText)

? "getauthor():"

? Psz2String(pszText)

?

inkey(3)

 

// Test der DLL-Funktion getlicensee() durchführen.

getlicensee(@pszText)

? "getlicensee():"

? Psz2String(pszText)

?

inkey(3)

 

// Bereichsprüfung einschalten.

l := setcoordarea(TRUE)

? "setcoordarea():"

IF l

  ? "OK!"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion coordtrans() durchführen.

// Gauß-Krüger -> UTMref

nKoordXQ := 2500000.0

nKoordYQ := 5500000.0

nKoordSysQ := 2

wBezSysQ := 1

nKoordSysZ := 51

wBezSysZ := 2

nStreifen := 0

l := coordtrans(nKoordXQ,nKoordYQ,pszKoordQ,nKoordSysQ,wBezSysQ,;

                @nKoordXZ,@nKoordYZ,@pszKoordZ,nKoordSysZ,wBezSysZ,;

                nStreifen)

? "coordtrans():"

IF l

  ? "UTMref:", Psz2String(pszKoordZ)

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion coordtrans2() durchführen.

// UTMref -> QTH (Maidenhead)

pszKoordQ := pszKoordZ

nKoordSysQ := 51

wBezSysQ := 2

pszKoordZ2 := MemAlloc(16)

nKoordSysZ := 52

wBezSysZ := 10

nStreifen := 0

l := coordtrans2(nKoordXQ,nKoordYQ,pszKoordQ,nKoordSysQ,wBezSysQ,;

                 @nKoordXZ,@nKoordYZ,pszKoordZ2,nKoordSysZ,wBezSysZ,;

                 nStreifen)

? "coordtrans2():"

IF l

  ? "QTH (Maidenhead):", Psz2String(pszKoordZ2)

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

MemFree(pszKoordZ2)

?

inkey(3)

 

// Test der DLL-Funktion coordtrans3() durchführen.

// Gauß-Krüger -> Länge / Breite

nKoordXQ := 2500000.0

nKoordYQ := 5500000.0

nKoordSysQ := 2

wBezSysQ := 1

nNotationQ := 0

nKoordSysZ := 1

wBezSysZ := 2

nNotationZ := 1

nStreifen := 0

l := coordtrans3(nKoordXQ,nKoordYQ,nKoordSysQ,wBezSysQ,nNotationQ,;

                 @nKoordXZ,@nKoordYZ,nKoordSysZ,wBezSysZ,nNotationZ,;

                 nStreifen)

? "coordtrans3():"

IF l

  ? "Laenge:", nKoordXZ

  ? "Breite:", nKoordYZ

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion setuserrefsys() durchführen.

// Verschiebungen, Drehungen, Maßstabsfaktor (ppm)

nVerschX := REAL8(-128.0)

nVerschY := REAL8(311.0)

nVerschZ := REAL8(-222.5)

nDrehungX := REAL8(2.43)

nDrehungY := REAL8(-3.15)

nDrehungZ := REAL8(4.14)

nMasstab := REAL8(8.6)

l := setuserrefsys(1,nVerschX, nVerschY, nVerschZ,;

                   nDrehungX, nDrehungY, nDrehungZ,;

                   nMasstab)

? "setuserrefsys():"

IF l

  ? "OK!"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion setuserellsource().

// Ellipsoid-Halbachsen.

nHalbAchsGrQ := REAL8(6379900.0)

nHalbAchsKlQ := REAL8(6377700.0)

l := setuserellsource(1000,nHalbAchsGrQ, nHalbAchsKlQ)

? "setuserellsource():"

IF l

  ? "OK!"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion setuserelltarget().

// Ellipsoid-Halbachsen.

nHalbAchsGrZ := REAL8(6378200.0)

nHalbAchsKlZ := REAL8(6375500.0)

l := setuserelltarget(1000,nHalbAchsGrZ, nHalbAchsKlZ)

? "setuserelltarget():"

IF l

  ? "OK!"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Benutzerdefiniertes Bezugssystem und Ellipsoide mit der Funktion

// coordtrans3() testen.

nKoordXQ := 2500000.0

nKoordYQ := 5500000.0

nKoordSysQ := 2

wBezSysQ := 1000

nNotationQ := 0

nKoordSysZ := 1

wBezSysZ := 1000

nNotationZ := 1

nStreifen := 0

l := coordtrans3(nKoordXQ,nKoordYQ,nKoordSysQ,wBezSysQ,nNotationQ,;

                 @nKoordXZ,@nKoordYZ,nKoordSysZ,wBezSysZ,nNotationZ,;

                 nStreifen)

? "coordtrans3() mit benutzerdefiniertem Bezugssystemwechsel:"

IF l

  ? "Laenge:", nKoordXZ

  ? "Breite:", nKoordYZ

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion meritrans() durchführen.

nKoordXQ := 2500000.0

nKoordYQ := 5500000.0

nKoordSysQ := 2

nEllipsoid := 1

nStreifen := 3

l := meritrans(nKoordXQ,nKoordYQ,@nKoordXZ,@nKoordYZ,nKoordSysQ,;

               nEllipsoid,nStreifen)

? "meritrans():"

IF l

  ? "Rechtswert:", nKoordXZ

  ? "Hochwert:", nKoordYZ

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion distancegeo() durchführen.

nKoordXQ := 07.19

nKoordYQ := 51.33

nKoordXZ := 07.61

nKoordYZ := 51.19

nEllipsoid := 1

l := distancegeo(nKoordXQ,nKoordYQ,nKoordXZ,nKoordYZ,@nStrecke,;

                 nEllipsoid)

? "distancegeo():"

IF l

  ? "Entfernung:", nStrecke, "Meter"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion distanceutm() durchführen.

nKoordXQ := 32464554.3

nKoordYQ := 5133744.1

nKoordXZ := 31647128.5

nKoordYZ := 5278144.7

l := distanceutm(nKoordXQ,nKoordYQ,nKoordXZ,nKoordYZ,@nStrecke)

? "distanceutm():"

IF l

  ? "Entfernung:", nStrecke, "Meter"

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion getcoordsys() durchführen.

wCoordSys := 18  // Deutsche Lambert mean Koordinaten

l := getcoordsys(wCoordSys,@pszText)

? "getcoordsys():"

IF l

  ? Psz2String(pszText)

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

  ? "Diese Funktion kann ausschließlich mit gültigen"

  ? "Freischaltschlüsseln ausgeführt werden!"

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion getrefsys() durchführen.

wBezSysQ := 5  // MGI, Hermannskogel, Bessel (1841)

wBezSysZ := 8  // CH1903, Old Observatory Bern, Bessel (1841)

l := getrefsys(wBezSysQ,wBezSysZ,0,0,@pszText)

? "getrefsys():"

IF l

  ? Psz2String(pszText)

ELSE

  geterrorcode(@pszText)

  ? Psz2String(pszText)

  ? "Diese Funktion kann ausschließlich mit gültigen"

  ? "Freischaltschlüsseln ausgeführt werden!"

ENDIF

?

inkey(3)

 

// Test der DLL-Funktion geterrorcode() durchführen.

? "geterrorcode():"

geterrorcode(@pszText)

? Psz2String(pszText)

?

inkey(30)

 

// Aufräumen für den Fall, dass setstringallocate(FALSE) gesetzt ist.

IF .not. pszText == NULL_PSZ

  MemFree(pszText)

ENDIF

IF .not. pszKoordZ == NULL_PSZ

  MemFree(pszKoordZ)

ENDIF

RETURN