Muster einer C#-Schnittstelle C# ist eine speziell für das WINDOWS NET Framework optimierte Programmiersprache |
/************************************************************************/ /* Muster einer C# -Schnittstelle */ /* zu einigen Funktionen der 32 Bit Dynamic Link Library GeoDLL */ /* Sie muss bei Bedarf um andere Funktionen erweitert werden. */ /* Die Schnittstelle kann direkt in den C# -Quellcode eingebaut werden */ /* oder als Header-Datei abgelegt werden */ /* */ /* Autor: Killet GeoSoftware Ing.-GbR */ /* und Dr. M. Reichert, ARCADIS Consult Freiberg */ /* */ /* Im Aufrufverzeichnis von GeoDLL müssen die Dateien geodll32.dll */ /* und geodllbn.bin vorhanden sein. */ /* */ /* Es sind zahlreiche Änderungen durchgeführt worden. Leider hatten wir */ /* nicht die Möglichkeit zu kompilieren. Bei eventuell noch enthaltenen */ /* Syntaxfehlern bittet der Autor um Mitteilung! */ /************************************************************************/
######################################################################### ########### Klasse class_kootrans zur Kapselung der geoDLL ############# #########################################################################
using System; using System.Runtime.InteropServices;
namespace beispielprojekt {
public class class_kootrans { public class_kootrans() {
}
// Beispiel zur Einbindung der GeoDLL in ein .NET-Projekt unter // Verwendung der Programmiersprache C# // Programmiert von Dr. M. Reichert, ARCADIS Consult Freiberg // (www.fg.arcadis.de) // August 2003 // Koordinatentransformationen unter Verwendung der DLL GeoDLL von // Killet GeoSoftware Ing.-GbR, Kempen, Germany (www.killetsoft.de)
// Das Vorhandensein der Dateien geodll32.dll und geodllbn.bin wird // in einem Verzeichnis vorausgesetzt, auf welches in der $PATH- // Umgebungsvariable verwiesen wird, im einfachsten Falle also das // Systemverzeichnis
// Import der GeoDLL mit Platform Invoke. Damit wird diese DLL mit // der Klasse class_kootrans gekapselt. // Jede benötigte DLL-Funktion muss separat importiert werden. // Um Code-Übereinstimmung mit der GeoDLL zu erzielen, muss. // CharSet=CharSet.Ansi eingestellt sein!
[DllImport("geodll32.dll", EntryPoint="setunlockcode", ExactSpelling=false, CharSet=CharSet.Ansi, SetLastError=true)] private static extern bool setunlockcode(string pszFreischaltcode, string pszLizenznehmer);
[DllImport("geodll32.dll", EntryPoint="setcoordarea", ExactSpelling=false, CharSet=CharSet.Ansi, SetLastError=true)] private static extern bool setcoordarea(int nSchalter);
[DllImport("geodll32.dll", EntryPoint="coordtrans", ExactSpelling=false, CharSet=CharSet.Ansi, SetLastError=true)] private static extern bool coordtrans(double nCoordXQ, double nCoordYQ, string pszKoordQ, int nCoordSysQ, int nRefSysQ, out double nCoordXZ, out double nCoordYZ, out string pszKoordZ, int nCoordSysZ, int nRefSysZ, int nStripZ);
internal string freischalten() { // gibt die Funktion setunlockcode nach außen if(setunlockcode("108151234-123454321","Winzigweich GmbH") && setunlockcode("123455678-471187656","Winzigweich GmbH")) return "ok"; else return "nicht frei geschaltet"; } // Die Freischaltschluessel stimmen natürlich nicht! // Sie müssen bei Killet GeoSoftware Ing.-GbR erworben werden! // Vollversion: Der Freischaltschluessel muss bei der 1. Eingabe stimmen! // Testversion: Die Funktion darf nicht aufgerufen werden! // Die Testversion funktioniert pro Programmlauf kurze Zeit ohne // Freischaltung!
internal string gausskrueger3GradZuGeografisch(double rechts, double hoch, out double laenge, out double breite) { // gibt die DLL-Funktion coordtrans in einer bestimmten, auf den // jeweiligen Einsatzzweck abgestimmten, Parameterkonfiguration nach // außen
// Rechnet die übergebenen Rechts- und Hochwerte des // Koordinatensystems 3° Gauss-Krueger, Bezugssystem DHDN // in geografische Koordinaten der Formatierung gggmm (Grad, Minute), // Bezugssystem WGS84, um.
string ergebnis; string outstring; // Dimensionierung der out-Parameter, da nicht im Funktionsaufruf // vorhanden, weil sie hier eigentlich nicht gebraucht werden.
laenge=breite=0; // out-Werte zuweisen, falls es wegen Dateneingabefehler nicht zu // einer Berechnung kommt.
// Eigene Koordinatenprüfung if(rechts>9999999 || rechts<0) { return ergebnis="Fehler in Rechtswerteingabe"; } if(hoch>9999999 || hoch<-9999999) { return ergebnis="Fehler in Hochwerteingabe"; }
setcoordarea(1); // Koordinatenüberprüfung der DLL einschalten.
if(coordtrans(rechts,hoch,"",2,0,out laenge, out breite, out outstring,32,0,0)) ergebnis="ok"; else ergebnis="Fehler bei der Berechnung";
return ergebnis; }
internal string geografischZuGausskrueger3Grad(double laenge, double breite, int zielStreifen, out double rechts, out double hoch) { // gibt die DLL-Funktion coordtrans in einer bestimmten, auf den // jeweiligen Einsatzzweck abgestimmten, Parameterkonfiguration nach // außen.
// Rechnet die übergebenen geografischen Längen- und Breitenangaben // der Formatierung gggmm (Grad, Minute) , Bezugssystem WGS84 // in Koordinaten des Koordinatensystems 3° Gauss-Krueger, // Bezugssystem DHDN, um.
// Der Parameter zielStreifen bestimmt den Streifen, für welchen die // Ergebniskoordinaten errechnet werden sollen.
string ergebnis; string outstring; // Dimensionierung des out-Parameters, da nicht im Funktionsaufruf // vorhanden, weil er hier eigentlich nicht gebraucht wird.
rechts=hoch=0; // out-Werte zuweisen, falls es wegen Dateneingabefehler nicht zu // einer Berechnung kommt.
//eigene Koordinatenprüfung if(laenge>18000 || laenge<-18000 || ((laenge/100)-Math.Floor(laenge/100))*100>59.99999) { return ergebnis="Fehler in Längeneingabe"; } if(breite>9000 || breite<-9000 || ((breite/100)-Math.Floor(breite/100))*100>59.99999) { return ergebnis="Fehler in Breiteneingabe"; } if(zielStreifen<0 || zielStreifen>120) { return ergebnis="Fehler in Meridianstreifeneingabe"; }
setcoordarea(1); // Koordinatenüberprüfung der DLL einschalten.
if(coordtrans(laenge,breite,"",32,0,out rechts, out hoch, out outstring,2,0,zielStreifen)) ergebnis="ok"; else ergebnis="Fehler bei der Berechnung";
return ergebnis; } } } #########################################################################
######################################################################### ########### Aufruf von Funktionen der Klasse class_kootrans ############ #########################################################################
private void button3_Click(object sender, System.EventArgs e) { class_kootrans koordinatentransformation = new class_kootrans(); // Instanzierung der eigenen Klasse class_kootrans, welche die // GeoDLL kapselt.
double laenge, breite, rechts, hoch; // Dimensionierung der Rückgabevariablen. string ergebnis;
// Freischalten der DLL. ergebnis=koordinatentransformation.freischalten(); MessageBox.Show(ergebnis);
// Funktionsaufruf der eigenen Klasse: Umrechnung GK-Koordinaten in // Geografische Koordinaten. ergebnis=koordinatentransformation.gausskrueger3GradZuGeografisch( 4492252.29,6011118.28,out laenge, out breite); MessageBox.Show("Ergebnis: " + ergebnis + " B: " + breite.ToString() + " L: " + laenge.ToString() );
// Funktionsaufruf der eigenen Klasse: Umrechnung von Geografische // Koordinaten in GK-Koordinaten, Projektion auf 3. Meridianstreifen. ergebnis=koordinatentransformation.geografischZuGausskrueger3Grad( 1152.87,5413.91,3,out rechts, out hoch); MessageBox.Show("Ergebnis: " + ergebnis + " MS: 3 RW: " + rechts + " HW: " + hoch);
// Funktionsaufruf der eigenen Klasse: Umrechnung von Geografische // Koordinaten in GK-Koordinaten, Projektion auf 4. Meridianstreifen. ergebnis=koordinatentransformation.geografischZuGausskrueger3Grad( 1152.87,5413.91,4,out rechts, out hoch); MessageBox.Show("Ergebnis: " + ergebnis + " MS: 4 RW: " + rechts + " HW: " + hoch);
// Funktionsaufruf der eigenen Klasse: Umrechnung von Geografische // Koordinaten in GK-Koordinaten, Projektion auf 5. Meridianstreifen. ergebnis=koordinatentransformation.geografischZuGausskrueger3Grad( 1152.87,5413.91,5,out rechts, out hoch); MessageBox.Show("Ergebnis: " + ergebnis + " MS: 5 RW: " + rechts + " HW: " + hoch); } #########################################################################
|