Hallo Leute,
ich bin gerade dabei mich in c++ einzufummeln. Für ein kleines Projekt muss ich eine DLL erstellen die von einem Cobol-Programm heraus aufgerufen werden soll. Nun habe ich nach stundenlanger Fehlersuche (weil es natürlich nicht out-of-the-box funktionierte) und einem DLL-Inspektor Programm festgestellt, das die exportierten Funktionsnamen meiner DLL durch diverse Zahlen und Buchstaben ergänzt wurden.
Beispiel:
int test3(const char*, char*)
wurde zu:
_Z5test3PKcPc
Meine Vermutung liegt nun darin, dass dies am Polymorphismus von c++ liegt. Also der Möglichkeit, Methoden mit demselben Namen, aber unterschiedlichen Parametern zu definieren. Das muss man nach außen hin natürlich unterscheiden.
Meine Frage ist nun: Liege ich damit richtig und muss mir anhand eines DLL-Inspektors den echten Namen der Funktion ermitteln (damit Cobol weiß wie die Funktion nun wirklich heisst), oder gibt es Mittel und Wege diese Exportierung zu beeinflussen sodass das Cobol-Programm einfach nur test3 anstatt Z5test3PKcPc aufrufen kann?
Dazu ein kurzer Ausschnitt aus der Beschreibung des Cobol-Compilers, wie man C++ DLLs einbindet
Gruß,
Martin
ich bin gerade dabei mich in c++ einzufummeln. Für ein kleines Projekt muss ich eine DLL erstellen die von einem Cobol-Programm heraus aufgerufen werden soll. Nun habe ich nach stundenlanger Fehlersuche (weil es natürlich nicht out-of-the-box funktionierte) und einem DLL-Inspektor Programm festgestellt, das die exportierten Funktionsnamen meiner DLL durch diverse Zahlen und Buchstaben ergänzt wurden.
Beispiel:
int test3(const char*, char*)
wurde zu:
_Z5test3PKcPc
Meine Vermutung liegt nun darin, dass dies am Polymorphismus von c++ liegt. Also der Möglichkeit, Methoden mit demselben Namen, aber unterschiedlichen Parametern zu definieren. Das muss man nach außen hin natürlich unterscheiden.
Meine Frage ist nun: Liege ich damit richtig und muss mir anhand eines DLL-Inspektors den echten Namen der Funktion ermitteln (damit Cobol weiß wie die Funktion nun wirklich heisst), oder gibt es Mittel und Wege diese Exportierung zu beeinflussen sodass das Cobol-Programm einfach nur test3 anstatt Z5test3PKcPc aufrufen kann?
Dazu ein kurzer Ausschnitt aus der Beschreibung des Cobol-Compilers, wie man C++ DLLs einbindet
Stichwort dabei: "C calling conventions"...ACUCOBOL-GT® provides several robust methods for interoperating with C programs. These technologies work equally well with C++ programs that conform to C calling conventions
Gruß,
Martin