[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
| Title: | Alpha Developer Support | 
| Notice: | [email protected], 800-332-4786 | 
| Moderator: | HYDRA::SYSTEM | 
|  | 
| Created: | Mon Jun 06 1994 | 
| Last Modified: | Fri Jun 06 1997 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 3722 | 
| Total number of notes: | 11359 | 
3493.0. "PSI - Point 25902" by KZIN::ASAP () Wed Apr 16 1997 03:56
    Company Name :  PSI - Point 25902
    Contact Name :  Frank Brockmann
    Phone        :  06021/366-0
    Fax          :  06021/366-112
    Email        :  [email protected]
    Date/Time in :  16-APR-1997 08:56:20
    Entered by   :  Nick Hudson
    SPE center   :  REO
    Category     :  vms
    OS Version   :  
    System H/W   :  
    Brief Description of Problem:
    -----------------------------
From:	RDGENG::MRGATE::"RDGMTS::PMDF::mail.dec.com::LennonD" 15-APR-1997 17:20:54.82
To:	RDGENG::ASAP
CC:	
Subj:	POINT 25902. PSI
From:	NAME: Declan Lennon <[email protected]@PMDF@INTERNET>
To:	NAME: '[email protected]' <IMCEAX400-c=US+3Ba=+20+3Bp=DIGITAL+3Bo=SBUEURMFG+3Bdda+3ASMTP=asap+40reo+2Emts+2Edec+2Ecom+3B@mail.dec.com@PMDF@INTERNET>
Hello -
POINT Log Number	 25902
Company Name 	PSI
Engineers name	Frank Brockmann
Telephone Number 		06021/366-0
Fax Number		06021/366-112
E-mail Address	 [email protected]
Operating System, Version	OpenVMS
Platform			Alpha
Problem Statement		
The following is a mail from Herr. Brockmann, PSI, roughly translated 
as:
As you can see in the following sample-program, using a C++ compiler 
the procedure name of a C routine with the extension _XI is provided. 
Not with the C compiler.
Is there a C++ compiler-switc that tells the compiler to behave as a C 
compiler?
What is necessary to call a C-function from a Pascal module?
Date: 14-Apr-1997 04:31pm
From: [email protected]@PMDF@INTERNET
  Subject:  Compilierung von C-Sourcen mit C++ Compiler zu Hd. 
H.Lennon
PSI Aktiengesellschaft			Boschweg 6			Telefon	06021/366-0
fuer Produkte und Systeme			63741 
Aschaffenburg		Telefax	06021/366-112
der Informationstechnologie			Geschaeftsbereich DL
Frank Brockmann
ASAP-Euro
Ballybrit Indistrial Park
Galway, Ireland
zu. Hd. H. Lennon
Betrfeff:  Compilierung von C-Sourcen mit C++ Compiler und Einbinden
               der C-Subroutinen in Pascal-Module.
Sehr geehrter H. Lennon,
wie im nachfolgenden Beispiel-Programm zu sehen ist, wird bei  der
Compilierung mit einem C++ Compiler der Procedurename einer
C-Subroutine mit der Extention __XI versehen (Sympol Name).
Bei der Compilierung mit einem C Compiler nicht.
Gibt es einen C++ Compiler-Switch der den C++ Compiler anweist
sich wie ein C-Compiler zu verhalten ?
Was ist alles notwendig um eine C-Function aus einem Pascal-Modul
herraus aufrufen zu koennen ?
Beispiel-Programm:
------------------------
/********************************************************************
* ******* *   C_SUB.C
**********************************************************************  
*****/
#include <stdio.h>
#include <string.h>
test_procedure(int yyy)
{
printf("C-Test-Procedure aus c_sub.c %d\n",yyy);
}
[End of file]
/*********************************************************************  
******* *   C_MAIN.C
**********************************************************************  
*****/
#include <stdio.h>
#include <string.h>
extern test_procedure(int yyy);
main()
{
printf("hallo test_procedure \n");
test_procedure(1);
}
[End of file]
{-----------------------------------------------------------------}
{File_name :PAS_MAIN.PAS}
{------------------------------------------------------------------}
PROGRAM test(input,output);
[EXTERNAL]procedure test_procedure__XI(yyy :integer ); extern;
{[EXTERNAL]procedure test_procedure(yyy :integer ); extern;}
[EXTERNAL]procedure test_procedure_pas(yyy :integer ); extern;
BEGIN
   writeln("test");
   test_procedure__xi(1);
   {test_procedure(1);}
   writeln("ende");
END.
[End of file]
$cxx c_sub.c
$cxx c_main.c
$pas pas_main.pas
$link c_main,c_sub/map=c_main.map
$run  c_main
hallo test_procedure
C-Test-Procedure aus c_sub.c 1
$link pas_main,c_sub/map=pas_main.map
$run  pas_main
test
C-Test-Procedure aus c_sub.c 2128493256
ende
Auszug aus c_main.map
                                                +-----------------+ !
                                                Symbols By Name !
                                                +-----------------+
Symbol                                           Value       Symbol 
 ----------                                         -----
MAIN                                             00010000-R
TEST_PROCEDURE__XI             00010090-R 
__MAIN                                         00010048-R 
          Key for special characters above:
                +--------------------+
                ! *  - Undefined     !
                ! A  - Alias Name    !
                ! I  - Internal Name !
                ! U  - Universal     !
                ! R  - Relocatable   !
 Buffer: C_MAIN.MAP
Auszug aus pas_main.map
                                                +-----------------+ !
                                                Symbols By Name !
                                                +-----------------+
Symbol                                                  Value
TEST_PROCEDURE__XI              00010080-R
          Key for special characters above:
                +--------------------+
                ! *  - Undefined     !
                ! A  - Alias Name    !
                ! I  - Internal Name !
                ! U  - Universal     !
                ! R  - Relocatable   !
                ! X  - External      !
                ! WK - Weak          !
 Buffer: PAS_MAIN.MAP
In replying, please use [email protected]
RFC-822-headers:
Received: from reoexc1.reo.dec.com by rg71rw.reo.dec.com (PMDF V5.0-7 #15552)
 id <[email protected]> for [email protected]; Tue,
 15 Apr 1997 16:22:50 +0100
Received: by reoexc1.reo.dec.com with SMTP
 (Microsoft Exchange Server Internet Mail Connector Version 4.0.994.63)
 id <[email protected]>; Tue, 15 Apr 1997 16:25:26 +0100
X-Mailer: Microsoft Exchange Server Internet Mail Connector Version 4.0.994.63
| T.R | Title | User | Personal Name
 | Date | Lines | 
|---|
| 3493.1 |  | KZIN::HUDSON | That's what I think | Wed Apr 16 1997 05:56 | 84 | 
|  | From:	DEC:.REO.REOVTX::HUDSON       "[email protected] - UK Software
Partner Engineering 830-4121" 16-APR-1997 10:55:34.00
To:	nm%vbormc::"[email protected]"
CC:	HUDSON
Subj:	RE: POINT 25902. Pascal call c++ function
Guten Tag Herr Frank Brockmann
Meine Deutsche is nicht gut, aber vielleicht diese Beispiel-Programm ist fur
Sie ein Antwort....
Regards
Nick Hudson
Digital Software Partner Engineering
// FUNC.CXX
#include <iostream.h>
extern "C"		// This prevents "name mangling" (or "name decoration")
void test_procedure()
{
        cout << "Guten Tag!!" << endl;
}
(* MAIN.PAS *)
program main(input,output);
[external] procedure test_procedure; extern;
begin
        writeln("I am pascal, I will call the C++ procedure now...");
        test_procedure;
        writeln("here is the pascal again");
end.
$ pas main
$ cxx func
$ lin main,func
$ run main
I am pascal, I will call the C++ procedure now...
Guten Tag!!
here is the pascal again
$
If you have many functions, you can say:
// C++ header file
#if defined __cplusplus
extern "C" {
#endif
void proc1() 
{
.
.
.
}
void proc2()
{
.
.
.
}
.
.
#if defined __cplusplus
}
#endif
See
  "Using C++ for OpenVMS Systems" 
	section 3.1.1 "Providing C and C++ linkage"
	section 1.5 "Name Demangling"
  "Annotated C++ Reference Manual" (Stroustrup & Ellis)
	section 7.4 "Linkage Specifications"
	section 7.1c .. 7.3c "Commentary"
  
 |