VC中调用fortran有哪些方法

VC中需要调用fortran的运算,有哪些方法可以调用成功,请列出几条,大致讲解一下谢谢。... VC中需要调用fortran的运算,有哪些方法可以调用成功,请列出几条,大致讲解一下 谢谢。 展开
 我来答
midway1942
2010-06-10 · TA获得超过426个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:107万
展开全部
声明:以下内容为转载,希望有用
前几天,导师要求在vc下调用fortran,对于我来说真是头疼啊,呵呵,以前也没有接触过这样的工作。没有办法,只好先查找资料然后再做了。
还好网上这样的资料确实不少。虽然说都说得不是很详细,但是综合一下,也差不多了。基本上是搞懂了,现在只是把作为一个新手的需要注意到的问题,而哪些文献上没有谈到的说一下。以及说一下可能调用不成功的原因。

首先给出一个例子,这里只给出fortran子程序的头,具体代码略去。

fortran子函数:

subroutine testvc(x1,x2,x3,x4,x5)
!ms$if .not. defined(LINKDIRECT)
!ms$attributes dllexport :: TESTVC
!ms$endif

real*4 x1 [value]
real*4 x2 [value]
real*4 x3 [value]
integer*4 x4 [value]
integer*2 x5 [reference]

cc 程序代码 cc注意其中x1,...x5要声明为value或者reference传递

C++程序代码如下:

#i nclude "stdafx.h"
#i nclude "windows.h"

int main(int argc, char* argv[])
{
// printf("Hello World!\n");
float tec;
float ktec;
HINSTANCE hmydll;
hmydll=LoadLibrary("testvc.dll");
if (hmydll!=NULL) printf("Load seccessful\n");
else printf("load unseccessful!\n");
void (_stdcall *testVC)(float x1,float x2,float x3,int x4,float *x5);
TESTVC=(void(_stdcall *)(float x1,float x2,float x3,int x4,float *x5))
::GetProcAddress(hmydll,_TESTVC@20);
if (TESTVC!=NULL) printf("Load TESTVC successful\n");
else printf("Load TESTVC unsuccessful\n");
TESTVC(31,114,2000,2002,,&x5);
ktec=x5;
printf("tec=%f\n",x5);
需要注意到一下几点:
一定要包含windows.h头文件,这是初学者往往没有注意到的,特别是对windows编程不熟悉的。
注意字节长度的传递,这点非常重要,如果长度和fortran下的不一致,调试和连接都没有错误,但是就是不能成功的执行。
要注意程序的自动检查,无论是载入库,还是载入fortran子函数,都要适当的检验一下是否载入成功,这样方便调试和查错!
还需要注意的,暂时忘记了,呵呵,记起来了在补充啊。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式