自定义函数 > 使用 Fortran > 要在您的自定义函数中使用 Fortran
要在您的自定义函数中使用 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/ 目录中安装它们。
这对您有帮助吗?