在VC中调用fortran生成的dll

1.  编译fortran函数为DLL,($ATTRIBUTES DLLEXPORT :: funname)标注为导出函数。

2.  在vc中用LoadLibraryEx得到该模块的句柄,用GetProcAddress定位该函数的指针

函数名称为_funname@number number为参数个数乘以4

3.  调用函数即可注意调用形式为_stdCall,传递指针。例如如果传递一个int 类型的参数要改为引用。在code generation改为_stdcall调用。

4.  注意函数指针的用法。

如:typedef int* Myproc(int n,int arr[3][3]);

Myproc = (MyProc) GetProcAddress()

参考文档:

 

 

 

Fortran 的DLL程序:

 SUBROUTINE ARRAYTEST(n,arr)

$ATTRIBUTES DLLEXPORT :: ARRAYTEST

INTEGER n,i,j

REAL(4) arr(3,3)

DO i=1,3

DO j=1,3

arr(i,j)=10.1*i+j

END DO

END DO

n=n+10

END SUBROUTINE

 

 

VC中调用程序:

HINSTANCE hIns;

hIns = LoadLibraryEx("EXAM.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);

 

typedef  int (*MYPROC)(int &a, float b[3][3]);

MYPROC fun= (MYPROC)GetProcAddress(hIns,"_ARRAYTEST@8");

 

float arr[3][3];

int a = 10;

fun(a,arr);

CString str;

str.Format("%.3f",arr[2][2]);

MessageBox(str);

::FreeLibrary(hIns);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值