Seitennavigation | ||||
---|---|---|---|---|
Aufgabe | Quelltext | Download | Erläuterungen | Allgemeines |
Mit dem nachfolgenden Programm ist es Ihnen möglich den Computernamen zu erfahren. Auf die Unterstützung von Unicode wurde hierbei verzichtet.
Der nachfolgende Quelltext wurde erfolgreich unter MF NetExpress 3.1 / Win NT 4 SP6 getestet.
IDENTIFICATION DIVISION. program-id. GetComputername. author. Bastie - Sebastian Ritter. date-written. 2002. ENVIRONMENT DIVISION. configuration section. special-names. call-convention 74 is WINAPI. DATA DIVISION. working-storage section. 77 cint pic s9(9) comp-5 is typedef. 77 culong pic 9(9) comp-5 is typedef. 01 DWORD is typedef usage culong. 01 BOOL is typedef usage cint. linkage section. 01 param. 05 computername pic X(50) VALUE SPACES. 05 computernamesize usage DWORD. 05 returncode usage BOOL. 88 winapi-error value zero. PROCEDURE DIVISION using param. main section. set computernamesize to length of computername. call WINAPI "GetComputerNameA" using by reference computername by reference computernamesize returning returncode. goback.
Den Quelltext können Sie hier downloaden.
In Cobol stehen bereits die entsprechenden Mechanismen bereit,um Anwendungen, die in anderen Programmiersprachen geschrieben wurden nutzen zu können. Das Prinzip der Wiederverwendung steht hier klar im Vordergrund. Aus diesem Grund gibt es die call-conventions. Mit diesen können Sie der Cobol Laufzeitumgebung sagen wie der Aufruf erfolgen soll. Die call-conventions befinden sich in der environment division, so dass sich folgender Quelltext ergibt.
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL NAMES. CALL-CONVENTION <nummer> IS <name> CALL-CONVENTION <nummer> IS <name>.
Nach Auflistung aller call-conventions erfolgt der '.' als Abschlusszeichen. Während der Name für Ihre call-convention frei wählbar ist, müssen Sie die Nummer berechnen bzw. wissen. Es handelt sich dabei um eine 16 Bit Zahl mit den nachfolgenden Bedeutungen.
Berechnung der call-convention | ||
---|---|---|
Offset | Bitwert | Bedeutung |
0 | 0 | Parameterübergabe von rechts nach links |
1 | Parameterübergabe von links nach rechts | |
1 | 0 | Stack wird vom aufrufenden Programm aufgeräumt |
1 | Stack wird vom aufgerufenem Programm aufgeräumt | |
2 | 0 | Rückkehrcode wird beim Verlassen gesetzt |
1 | Rückkehrcode wird beim Verlassen nicht gesetzt | |
3 | 0 | Normales Link Verhalten |
1 | Statisches Link Verhalten | |
4 | 0 | Reserviert (0) |
1 | ||
5 | 0 | Reserviert (0) |
1 | ||
6 | 0 | Aufruf erfolgt nicht nach den Windows-Stdcall-Konvention |
1 | Aufruf erfolgt nach den Windows-Stdcall-Konventionen | |
7 | 0 | Reserviert (0) |
1 | ||
8 | 0 | Die Parameteranzahl wird überprüft |
1 | Die Parameteranzahl wird nicht überprüft | |
9 | 0 | nicht case sensitive |
1 | case sensitive | |
10 | 0 | Reserviert (0) |
1 | ||
11 | 0 | Reserviert (0) |
1 | ||
12 | 0 | Reserviert (0) |
1 | ||
13 | 0 | Reserviert (0) |
1 | ||
14 | 0 | Reserviert (0) |
1 | ||
15 | 0 | Reserviert (0) |
1 |
Mit ein bisschen Rechnerei kommen wir schließlich zu dem Ergebnis, dass für den Aufruf der Windows API die Konvention 74 zu verwenden ist. Hilfsweise könnten Sie auch die Konvention 66 verwendet werden. Der Nachteil liegt im "normalen" Link Verhalten jedoch darin, dass die DLL nicht allein deshalb bekannt ist, nur weil die entsprechende *.LIB Datei vorhanden ist. Vielmehr müssen wir dann die DLL zuerst gesondert aufrufen.
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de