后来我尝试了一些可能性。我更新的文件如下
为其创建DLL的C文件如下
// example_dll.c
#include <stdio.h>
#include "example_dll.h"
EXPORT void tstfunc (void)
{
printf("Hello\n");
}
EXPORT int Double11(int x)
{
printf("From the Double11\n");
printf("%d\n",x);
return x;
}
用于创建DLL的.h文件如下
// example_dll.h
#ifdef EXAMPLE_DLL_H
// the dll exports
#define EXPORT __declspec(dllexport)
#else
// the exe imports
#define EXPORT __declspec(dllimport)
#endif
// function to be imported/exported
EXPORT void tstfunc (void);
EXPORT int Double11(int x);
用于链接dll的Fortran文件如下
! fortcall.f90
program ForCall
IMPLICIT NONE
integer :: sum
integer :: inte3
INTERFACE
SUBROUTINE write() BIND(C,NAME='tstfunc')
END SUBROUTINE write
END INTERFACE
INTERFACE
SUBROUTINE get_integer(inte,inte2) BIND(C,NAME='Double11')
USE ISO_C_BINDING
IMPLICIT NONE
INTEGER (C_INT), VALUE :: inte
INTEGER (C_INT), INTENT(OUT) :: inte2
END SUBROUTINE get_integer
END INTERFACE
CALL write
CALL get_integer(1,inte3)
print*,"the output is",inte3
END PROGRAM ForCall
在命令提示符下输入以下指令后
gfortran -o dll_foo_test fortcall.f90 -L。example_dll.dll
输出将如下所示
Hello
From the Double11
1
the output is -2
在这一点上,有些事情是不对的。代码能够将值从 FORTRAN 传递到 DLL,而代码不会从 dll 返回正确的值。显示一些垃圾值 -2 而不是 1。
我想在代码中修复那部分。