主题:[讨论]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);
}