在VC中调用fortran生成的dll

来源:互联网 发布:飞秋2017 mac 编辑:程序博客网 时间:2024/05/20 20:45

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);

原创粉丝点击