सी कोड कॉलिंग FORTRAN से

वोट
0

माइक्रोसॉफ्ट FORTRAN 5.1 और Microsoft सी दिया गया / सी ++ 14.0, लिंकर कि FORTRAN के उस संस्करण के साथ आता है के साथ (है कि अन्य निर्भरता के लिए इस्तेमाल किया जाना चाहिए) कैसे मैं एक सी समारोह बना सकते हैं और यह FORTRAN आवेदन से कहते हैं?

09/12/2008 को 21:46
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
3

वहाँ नमूना कोड यहाँ के साथ MSDN पर एक लेख है: FORTRAN सी करने के लिए कॉल

10/12/2008 को 00:37
का स्रोत उपयोगकर्ता

वोट
1

आपके पास दो विकल्प।
1) मैं उदाहरण के साथ दिखा सकते हैं

FORTRAN

program ftest
use iso_c_bindings
implicit none
interface
function saythis(a) ! should be subroutine if saythis returns void
import :: c_ptr
type(c_ptr), value :: a
end function saythis
end interface

character(len=80), target :: str
type(c_ptr) cstr
integer :: r

str='Hello World From Fortran' // C_NULL_CHAR
cstr=c_loc(str(1:1))
r=saythis(cstr)

C / C ++

#ifdef __cpluscplus
#include &ltl;cstdio>
using namespace std;
#else
#inlcude <stdio.h>
#endif

#ifdef __GNUC__
#define FORT(func) func ## _
#else
#define FORT(func) __stdcall func ## _
#endif

#ifdef __cpluscplus
extern "C" {
#endif
__declspec(dllexport) int FORT(sayit)(char* c)
{
return printf("%s\n",c);
}

#ifdef __cpluscplus
}
#endif

यह w / जीसीसी toolchain काम करता है। आप DLL और fortran वस्तु कोड पर DUMPBIN के लिए अगर नाम सही ढंग से मेल खाते हैं देखने के लिए होगा।
दूसरी तरह के समान है:

//This is for gcc toolchain
//you'll have to find the symbol conversion yourself
//I think that Visual Studio converts fortran names
//to ALL CAPS so instead of func => _func you'll need func => FUNC

FORTRAN

program ftest
integer aa,bb,cc
common/vari/aa,bb,cc

aa=7
bb=11
cc=0
call dosomething
call dosomethingelse(aa,bb,cc)

C / C ++

#ifdef __cplusplus
extern "C" {
#endif
int _dosomething();
int _dosomethingelse(int*,int*,int*); //all fortran is pass by reference
struct { int aa,bb,cc; } vari;
#ifdef __cplusplus
}
#endif

//function def's go here
//struct vari should be the same memory as common/vari block

COMMAND संकलन

$>g++ -c ctest.c <br/>
$>gfortran -c ftest.f90 <br/>
$>gfortran *.o -lstdc++ -o test_prog <br/>

उम्मीद है की यह मदद करेगा

27/02/2009 को 14:19
का स्रोत उपयोगकर्ता

वोट
0

हो सकता है कि कभी नहीं से देर से बेहतर है। मैं fortran 5.1 दृश्य स्टूडियो 1. साथ एमएस मुझे यकीन है कि जो दृश्य स्टूडियो 14.0 के बराबर है नहीं कर रहा हूँ का उपयोग कर याद लेकिन मुझे लगता है कि यह अपेक्षाकृत हाल ही में और नहीं 13 साल पुराना है। मुझे लगता है कि इस संयोजन एक गैर स्टार्टर के रूप में 5.1 खिड़कियों 3 के लिए एक 16 बिट संकलक है।

31/07/2009 को 18:06
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more