Först av allt: Jag har Cobol som modersmål. Har Powerbasic som andraspråk. C och C++ har jag aldrig skrivit en rad i, nästan som finska för mig. Men nu har jag fått tag på en Cobol-kompilator som genererar C++-kod. Den genererade koden kompileras och assembleras till objektkod med GCC-program och slutligen länkas med GCC-program till EXE-program, alt. DLL-MODULER. Allt funkar som det ska om man länkar allt statiskt. Men jag vill ha dynamiskt länkning med DLL-moduler för alla sub-program. Det handlar om ca 500 huvudprogram, som var och en anropar 5-30 st subprogram. Tidigare använde jag AcuCobol som har en egen dynamisk länkning av subprogram, men efter MicroFocus’s köp av AcuCobol vill jag inte ha med dem att göra (finns ytterligare anledningar) så det är därför jag letar efter andra lösningar. Leverantören av Cobol-kompilatorn, www.thekompany.com, dvs företaget som levererar programmet som översätter Cobol-kod till C++-kod, kan inte stava till ordet manual, ännu mindre ge besked på frågor till supporten, men i övrig är det ok.Dynamiskt länkning
Grafiskt gränssnitt, dvs Windows-stuk ska jag ordna med systemet ”GUI ScreenIO”
Eftersom jag ska skicka ut programpaketet till kunder som inte har en egen data-avdelningar, krävs en synnerligen enkel installation och underhåll.
Jag vill inte använda MS’ C++-kompilator., tycker GCC-konceptet är ok, behöver bara skicka med två DLL’er till kunderna.
Varje försök att använda DLL’er för subprogram misslyckas:
dlsym: Win32 error 127
Unable to find subprogram under1
3 [sig] over 4660 open_stackdumpfile: Dumping stack trace to over.exe.stackdump
I samma mapp finns under1.dll.
Här är det anropande programmets kod, dels over.h, dels over.cc
// ./over.h generated from COBOL.
#ifndef OVER_INCLUDED
#define OVER_INCLUDED
#include "cobol2gcc.h"
class C_over : public CobolProgram {
static char ws_[48];
#define _DIVERSE_v_1 ((CobXchar *) (ws_ + 0))
#define _A_TERM_v_2 ((CobXchar *) (ws_ + 0))
#define _B_TERM_v_3 ((CobXchar *) (ws_ + 10))
#define _C_TERM_v_4 ((CobXchar *) (ws_ + 15))
#define _UNDERPROGRAM_v_5 ((CobXchar *) (ws_ + 35))
#define _SLASK_v_6 (*((CobXchar *) (ws_ + 41)))
void initialize_ws ();
PerformStack performStack;
public:
C_over ();
void procedure ();
void cancel ();
};
#endif
// ./over.cc generated from COBOL.
#include "over.h"
int main (int argc, char *argv[]) {
CobolProgram::setUp (argc, argv);
C_over _program;
_program.procedure ();
return returnCode;
}
C_over::C_over () : CobolProgram ("over", 0) {
}
char C_over::ws_[48];
void C_over::initialize_ws () {
memset (_DIVERSE_v_1, ' ', 42);
}
void C_over::cancel () {
initialize_ws ();
}
void C_over::procedure () {
CobolEnvironment _cobEnv;
if (!is_initialized) {
initialize_ws ();
is_initialized = 1;
}
_s_ALLT:
_p_STATSEKVENS_in_ALLT:
{
memcpy (_A_TERM_v_2, "A--------A", 10);
memcpy (_B_TERM_v_3, "B---B", 5);
memcpy (_C_TERM_v_4, "C------------------C", 20);
}
_p_BILDVISNING_in_ALLT:
{
display ("START I PROGRAM OVER\n", 21);
display ("A=", 2);
display (_A_TERM_v_2, 10);
display ('\n');
display ("B=", 2);
display (_B_TERM_v_3, 5);
display ('\n');
display ("C=", 2);
display (_C_TERM_v_4, 20);
display ('\n');
display ("--\n", 3);
}
_p_VIDARE_in_ALLT:
{
memcpy (_UNDERPROGRAM_v_5, "under1", 6);
(*CobolProgram::getFunction (_UNDERPROGRAM_v_5, 6)) (_A_TERM_v_2, _B_TERM_v_3, _C_TERM_v_4);
}
_p_BILDVISNING_TILLBAKA_in_ALLT:
{
display ("TILLBAKA I PROGRAM OVER\n", 24);
display ("A=", 2);
display (_A_TERM_v_2, 10);
display ('\n');
display ("B=", 2);
display (_B_TERM_v_3, 5);
display ('\n');
display ("C=", 2);
display (_C_TERM_v_4, 20);
display ('\n');
}
_p_SLUTSEKVENS_in_ALLT:
{
accept (&_SLASK_v_6, 1);
display ("SLUT\n", 5);
stopRun ();
}
}
Någon som kan ge en hjälpande hand??
/Fim W.