回 帖 发 新 帖 刷新版面

主题:[讨论]C++和Fortran混编的问题

最近遇到了一个C++和Fortran混编的问题,很是困惑。

 具体问题是:将一个Fortran子程序编译为动态链接库供C++调用,子程序虚参为数组。当该数组声明为"assumed size"时,一切都没问题。而当将该数组声明为”assumed shape"时,C++调用就出错了。编译环境为win7(32)+VS2008+IVF11.1.051下面给出示例代码!

 

fortran 代码:

subroutine test(a)
  !DEC$ ATTRIBUTES DLLEXPORT::test
  !DEC$ ATTRIBUTES ALIAS:'_test'::test
  implicit none
  integer :: a(*)  ! assumed size

  ! integer :: a(:)  ! assumed shape

  write(*,*) a(1)

end subroutine test

 

C++代码:

#include <windows.h>

void main(void){
    typedef void (*fp) (int *);
    HINSTANCE hLibrary=LoadLibrary("test.dll");
    fp test=(fp)GetProcAddress(hLibrary,"test");
    int a[2] = {1,2};
    test(a);
    FreeLibrary(hLibrary);
}

 

 

 

回复列表 (共2个回复)

沙发

哦!!太精彩了居然可以混编!!?我太无知了,请问在哪里可以学混编,有这类教材吗!!?!?

板凳

混编是为了更好地利用现有资源以及不同语言的优势,Fortran2003标准针对和c的混编已经增加了很多新的特性,这方面网上有很多资料可以参考。我也是最近才接触这方面的东西,一起学习吧!

我来回复

您尚未登录,请登录后再回复。点此登录或注册