要在您的自定义函数中使用 Fortran
创建 Fortran 库
1.
在 Compaq Visual Fortran 6.6B 中创建一个新的
Fortran Static Library
项目,并且将您的文件添加到项目中。
2.
在
Build
菜单中,单击
Set Active Configuration
,并选择
Release
。
3.
编译并构建。Fortran 项目的
Release
子文件夹现在包含
[myfortranlib].lib
。
为自定义函数修改 C 代码
当您有 Fortran 库时,必须在 C 代码中添加:
extern void __stdcall FORTRANFUNCTION(const double *array1, const double *scalar1 [, etc.]);
// Since FORTRAN typically expects arguments by reference, arguments are passed
// as pointers. To pass values, the FORTRAN code must contain a compiler directive
// telling the function to expect a value rather than an address.
LRESULT mcadfunction(LPCOMPLEXARRAY array1, LPCCOMPLEXSCALAR scalar1, etc.)
// this defines the function before FUNCTIONINFO, using the same variable names
// called by the external FORTRAN function.
{
// some error checking goes here, followed by the
// actual call to the FORTRAN function. For example,
FORTRANFUNCTION(&array1->hReal[0][0], &scalar1->real [, etc.]);
// Either the function call must be in UPPERCASE, or you will have to set
// Settings->FORTRAN->External procedures->External name implementation
// to "Upper case" in your FORTRAN compiler. Any other C functionality follows...
return 0;
}
1.
在 MS Visual C++ 或 Visual Studio 中现有的 C 项目下,选择
链接器
选项卡,然后从
类别
菜单中选择
输入
。在列表末尾的
Object/library modules
文本框中输入
[myfortranlib].lib
。
2.
在
忽略库
文本框中输入
libc.lib
。
3.
在
附加库路径
文本框中输入
[myfortranlib].lib
文件的路径,例如
C:/temp
。
4.
编译并构建 DLL。
•
应将 Fortran 代码作为单独的线程来运行,而非直接作为函数来运行。利用这种方式,例如,如果通过按下
Esc
来终止进程,则可以终止整个线程而无需检查当前哪个 Fortran 子程序是活动的。
•
用一个特殊函数 (将错误代码返回到调用 C 中,这将优雅地终止线程) 替换 Fortran 代码中所有的
STOP
语句,这是有用的。
•
如果 Fortran 代码包含
PRINT
到控制台语句,则通过将控制台再分配给文件可以转换这些语句,这样输出将到达文件而非屏幕。如果 Fortran 由于一个错误正常终止,则可以编写 C++ 程序读取该日志文件并作为一个窗口显示此文件。例如:
SUBROUTINE INIT_STDOUT ()
c this subro which redirects FORTRAN output to file
use dfwin
integer res
c CALL close_stdout
res=SETENVQQ("FOR_PRINT=C:/FORT_OUT.TXT")
c PRINT *, 'Print a character to initialize '
PRINT *,' '
RETURN
END
•
如果您想要分配一个基于 Fortran 的 DLL,则运行它的计算机必须安装相应的 Fortran 运行时库。您可以使用以下 Fortran 运行时库:
◦
DFORRT.DLL
◦
DFORRTD.DLL
◦
DFORMD.DLL
◦
DFORMDD.DLL
◦
DFDLG100.DLL
◦
MSVCRT.DLL
如果这些 DLL 缺失,将会出现错误。DLL 与您的 Fortran 编译器打包在一起。您必须在
Windows/system32/
或
WINNT/system32/
目录中安装它们。