![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: BACKGROUND I am a Windows C++ developer who are writing a program under Compaqs "COM for OpenVMS". The program is a C-main program which calls COBOL subroutines. QUESTION The C compiler or OpenVMS linker emits decorated entry point symbols. How do I turn that off? EXAMPLE The COBOL subroutine is called "abc123". C program does a function call "abc123( some_args );" and the linker complains about "abc123_@1%1&" being an unresolved external. Greatful for all help! The Answer is : A specific example of the OpenVMS C or C++ source code that demonstrates the problem would have been quite useful here -- without this information, the OpenVMS Wizard can only provide a general answer and a recommendation to contact the Customer Support Center. Neither Compaq C nor the OpenVMS LINKER will decorate symbols. Compaq C++ does decorate symbols (this decoration permits the compiler to indicate the function and argument types involved, and thus permits the overloading of the functions that is expected for C++), and this decoration can be disabled via the use of the extern "C" linkage. For example: extern "C" { extern int ExternSymbol(void *); extern int OtherExternSymbol(void *); } For general information on C and C++ programming on OpenVMS, please see the OpenVMS FAQ, the shareable image cookbook (a pointer is in the FAQ), the available documentation on symbol mangling and on symbol decorating, and the OpenVMS calling standard manual for a description of the OpenVMS argument passing mechanisms.
|