利用FORTRAN建立动态链接库的步骤如下
- 格式:doc
- 大小:20.50 KB
- 文档页数:1
动态链接库教程动态链接库(Dynamic Link Library,简称DLL)是一种可由多个程序共享的库文件,它包含了一组函数和数据,可以在程序运行时加载和调用。
DLL 文件可用于将一些通用的功能封装成函数,供多个程序调用,从而提高代码的复用性和开发效率。
本文将详细介绍动态链接库的概念、使用方法以及制作过程。
一、动态链接库的概念动态链接库是一种包含了函数和数据的库文件,它可以在程序运行时被加载和调用。
与静态链接库相比,动态链接库的优势在于节省内存空间和提高代码的复用性。
当多个程序需要使用同一个功能时,它们可以共享同一个DLL文件,避免了重复编写相同的代码。
二、动态链接库的使用方法在使用动态链接库之前,我们首先需要了解动态链接库的编译、加载和调用过程。
1.编译动态链接库在创建 DLL 文件时,我们需要按照一定的规范编写代码,并将其编译成 DLL 文件。
编译时,需要指定导出函数的修饰符(如 _stdcall、_cdecl等),以及导出函数的声明。
这些步骤可以在开发环境(如Visual Studio)中完成。
2.加载动态链接库在程序运行时,需要加载 DLL 文件。
我们可以通过调用LoadLibrary 函数来加载 DLL,该函数返回一个句柄,表示 DLL 的实例。
加载 DLL 文件后,我们可以通过该句柄获取 DLL 中导出函数的地址。
3.调用动态链接库在获取到DLL中导出函数的地址后,我们可以通过函数指针来调用DLL中的函数。
通过函数指针,程序可以跳转到DLL中执行指定的函数,从而完成相应的功能。
三、制作动态链接库下面以C++语言为例,简单介绍如何制作一个动态链接库。
1.创建DLL工程在 Visual Studio 中创建一个 DLL 项目,选择 DLL(动态链接库)作为项目类型。
在项目中添加需要导出的函数,并在头文件中进行声明。
2.编写导出函数在 DLL 项目中编写需要导出的函数,并在函数前添加修饰符(如_stdcall、_cdecl等)。
FORTRAN静态库、动态库的生成、维护与调用闫昊明2006-9-10一、FORTRAN静态库的生成与维护FORTRAN 静态库是经过编译的代码块,它与主程序相对独立,可以被主程序调用,是FORTRAN工程类型之一. 静态库包含一系列子程序,但不包括主程序. 静态库一般具有LIB扩展名并包含目标代码,且静态库存放在它们特定的目录中. FORTRAN静态库在组织大型程序和在不同程序之间共享子程序等方面具有较大的优点,其重要性不言而喻. 当将静态库与主程序联系起来时,在主程序中调用静态库中的任何子程序将编译到相应的可执行程序. 应用静态库的时候,只有所需要的子程序才在编译过程中插入到可执行文件(.EXE),这意味着这种可执行文件将比包含所有的子程序所生成的可执行文件小. 而且,不必担心哪些子程序是需要的,哪些是不需要的,编译器将替你做出选择. 同时,当更改静态库中的子程序时,相应的应用程序可以不做任何改变,而只需要对其进行重新的编译链接,即可获得新的结果,这无疑也是方便的.目前,常用的FORTRAN静态库有很多种,WINDOWS操作系统下的Compaq Visual FORTRAN version 6.5(简称CVF65)自带的数学统计库IMSL就是一个非常全面的静态库,可以用来解决线性代数和统计学上的很多经典问题. 此外,在NCAR互联网站有很多有用的FORTRAN子程序(网址:/softlib/mathlib.html),其中包括地球物理科学问题、离散和快速Fourier变换、可分离的椭圆微分方程、插值、Legendre多项式、普通数学问题、本征值问题求解、线性方程求解、非线性方程求解、常微分方程求解、特殊函数、统计学等常用子程序集等. 这些FORTRAN子程序可以解决很多基础性的问题,因此有很高的利用价值.在WINDOWS操作系统下,可以用两个命令分别生成静态库. 一个是用‘nmake’命令,它一般用来编译原来应用在UNIX环境下的FORTRAN子程序集,在编译过程中要读取makefile文件中的编译命令,类似于在UNIX下安装软件. 另一个是用‘lib’命令,它可以在WINDOWS环境下编译任何需要集成为静态库的子程序集.编译静态库在DOS命令行环境下比较方便,以后的命令行都指在此环境下运行. 在编译静态库前,首先要安装CVF65,其次要完成要编译的FORTRAN子程序(*.f90). 对于FORTRAN子程序,最好用FORTRAN90的标准来完成,应该放弃FORTRAN77标准。
在 Visual Studio 中使用 Fortran 和 MPI(Message Passing Interface)进行并行编程,可以通过以下步骤:1. 安装 Visual Studio:首先,确保已安装 Visual Studio。
您可以从 Microsoft 官方网站上下载适用于 Fortran 开发的 Visual Studio 版本。
2. 安装 Intel Fortran Compiler:如果您计划使用 Intel Fortran 编译器进行开发,需要安装 Intel Parallel Studio XE,其中包含了 Intel Fortran Compiler。
3. 创建 Fortran 项目:在 Visual Studio 中,选择 "创建新项目",然后选择 "Fortran" 类型的项目。
4. 配置项目属性:在项目属性中,设置编译器选项和链接器选项,以及其他项目设置。
例如,设置编译器为 Intel Fortran Compiler。
5. 编写 Fortran 代码:编写您的 Fortran 代码,可以使用 Fortran 90/95/2003/2008 的语法。
6. 添加 MPI 支持:在 Fortran 代码中,使用 MPI 库函数进行并行编程。
您需要添加MPI 头文件和库文件的路径,以便编译和链接 MPI 相关代码。
MPI 头文件通常位于MPI 安装目录的 include 文件夹下,而库文件则位于 lib(Windows)或 lib64(Linux)文件夹下。
7. 构建和运行:构建项目并运行生成的可执行文件。
在运行 MPI 程序时,您可能需要在启动命令中指定使用的进程数(例如,mpiexec -n 4)。
这些步骤提供了一个基本的框架,让您可以在 Visual Studio 中进行 Fortran 和 MPI 的并行编程。
根据您的具体需求和环境,可能还需要进行一些其他的配置和设置。
动态链接库的创建与使用动态链接库(Dynamic Link Library,DLL)是一种用于在Windows 操作系统中组织、存储和分发可执行代码和数据的文件格式。
DLL文件包含一组函数、变量和资源,可以与其他程序共享,以便提高应用程序的开发效率和运行速度。
1.创建DLL项目:首先,在开发环境中创建一个DLL项目。
可以使用开发工具如Visual Studio等来创建。
选择DLL项目后,在项目中添加需要的函数、变量和资源。
2.导出函数和变量:在DLL项目中,需要明确指定哪些函数和变量可以被外部程序调用。
可以通过将函数和变量声明为`__declspec(dllexport)`来实现。
这样,外部程序在调用时可以访问到这些函数和变量。
示例代码如下:```cpp__declspec(dllexport) int add(int a, int b)return a + b;}```3.编译DLL项目:在完成函数和变量的导出后,编译DLL项目生成DLL文件。
编译过程会把函数和变量编译成二进制代码,并生成DLL文件。
4.调用DLL:在外部程序中调用DLL中的函数和变量时,首先需要加载DLL文件,并获取对应的函数或变量的地址。
然后,可以使用加载的函数或变量来执行相应的操作。
示例代码如下:```cpp#include <windows.h>#include <iostream>using namespace std;typedef int (*AddFunc)(int, int);int mainHMODULE dllHandle = LoadLibrary("mydll.dll");if (dllHandle == NULL)cout << "Failed to load DLL." << endl;return 1;}AddFunc addFunc = (AddFunc)GetProcAddress(dllHandle, "add");if (addFunc == NULL)cout << "Failed to get address of function." << endl;FreeLibrary(dllHandle);return 1;}int result = addFunc(1, 2);cout << "Result: " << result << endl;FreeLibrary(dllHandle);return 0;}```在上述代码中,通过`LoadLibrary`函数加载DLL文件,并使用`GetProcAddress`函数获取函数地址,在调用函数时可以直接使用获取到的函数地址来执行相应的操作。
利用FORTRAN建立动态链接库的步骤如下
利用FORTRAN建立动态链接库的步骤如下:
1,在fortran开发环境下新建一个工程,其类型为Dynamic link libiary,,并且命名工程,编写源程序,命名,插入工程或将一个只含有函数或者子程序的fortran程序加入到project 中,编译通过即可生成DLL。
在此必须对调用的函数或子程序加以声明,以标识这些函数或子程序在所生成的DLL中是可用的。
具体语法如下:
Subroutine sub name
! MS $ ATTRTBUTES DLLEXPORT :: sub name
$ A TTRTBUTES用于声明微软扩展属性。
DLLEXPORT是上述属性之一,它的作用就是声明该函数或子程序能被其他程序或DLL调用,sub name为函数或子程序名。
2,VB调用FORTRAN DLL
用上面的程序建立动态链接库后就可以用VB调用它,在调用前,首先对被调用的DLL 模板在模块级别中进行声明,VB程序声明如下:【Public ︳private】declare sub name lib “libname ”【alias “aliasname”】【(【arglist】)】.
声明之后在VB中使用call 语句实现调用DLL中的函数或子程序。
调用语句如下:Call sub name (arglist)。
操作系统实验一_动态链接库的建立与调用动态链接库(Dynamic Link Library,简称DLL),是一种可执行文件格式,可以包含一些可被其他程序共享和调用的代码、数据和资源。
与静态链接库相比,动态链接库在系统运行时被加载,可以实现动态更新和共享代码的功能。
在操作系统实验一中,我们将学习如何建立和调用动态链接库。
动态链接库的建立通常包括以下步骤:1.编写库文件的源代码:首先,需要编写动态链接库所包含的代码。
这些代码可以是函数、类、变量等程序模块的实现。
在编写代码时,需要注意代码的可重用性和可扩展性,以便其他程序可以调用和使用这些代码。
2.编译源代码生成库文件:将源代码编译成目标文件,并链接生成动态链接库文件。
在编译和链接过程中,需要根据编译器和操作系统的要求设置编译选项和链接选项,例如指定动态链接库的输出格式和名称等。
3.导出函数和符号:在编写代码时,需要使用适当的方式声明和定义函数、类、变量等实体,以便其他程序可以调用和使用它们。
在编译和链接过程中,需要使用一些特殊的关键字或指令来指定导出的函数和符号。
4.生成库文件:使用编译器和链接器将目标文件生成动态链接库文件,并进行必要的优化和处理。
生成的库文件通常包含一些元数据信息,例如导出函数和符号的位置和名称等。
动态链接库的调用通常包括以下步骤:1.导入库文件的头文件:在调用动态链接库的程序中,需要包含动态链接库的头文件。
该头文件包含了库文件中导出函数和符号的声明和定义。
2.加载动态链接库:在程序启动时,需要使用操作系统提供的加载动态链接库的函数来加载动态链接库文件。
加载动态链接库时,需要提供动态链接库的文件路径或其他标识符。
3.获取导出函数的地址:在加载动态链接库后,可以使用操作系统提供的函数来查询和获取动态链接库中导出函数和符号的地址。
获取导出函数的地址后,可以通过函数指针来调用动态链接库中的函数。
4.调用动态链接库函数:通过获取到的函数指针,可以直接调用动态链接库中的函数。
动态链接库和静态库的创建及使用教程第一部分静态库(以vs2005为例)一、创建新的静态库项目1.从“文件”菜单中,选择“新建”,然后选择“项目…”。
2.从“项目类型”窗格中,选择“Visual C++”下的“Win32”。
3.从“模板”窗格中,选择“Win32 控制台应用程序”。
4.为项目选择一个名称,如“MathFuncsLib”,并将其输入“名称”字段。
为解决方案选择一个名称,如“StaticLibrary”,并将其输入“解决方案名称”字段。
5.按“确定”启动Win32 应用程序向导。
在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。
6.从“Win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“静态库”。
7.从“Win32 应用程序向导”的“应用程序设置”页中,取消选择“附加选项”下的“预编译头”。
8.按“完成”创建项目。
向静态库添加类1.若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。
将显示“添加新项”对话框。
从“类别”窗格中,选择“Visual C++”下的“代码”。
从“模板”窗格中选择“头文件(.h)”。
为头文件选择一个名称,如“MathFuncsLib.h”,并按“添加”。
将显示一个空白文件。
2.添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。
代码应与以下内容类似:// MathFuncsLib.hnamespace MathFuncs{class MyMathFuncs{public:// Returns a + bstatic double Add(double a, double b);// Returns a - bstatic double Subtract(double a, double b);// Returns a * bstatic double Multiply(double a, double b);// Returns a / b// Throws DivideByZeroException if b is 0static double Divide(double a, double b);};}3.若要为新类创建源文件,请从“项目”菜单中选择“添加新项…”。
FORTRAN静态库动态库的生成FORTRAN静态库、动态库的生成、维护与调用闫昊明2006-9-10一、FORTRAN静态库的生成与维护FORTRAN 静态库是经过编译的代码块,它与主程序相对独立,可以被主程序调用,是FORTRAN工程类型之一. 静态库包含一系列子程序,但不包括主程序. 静态库一般具有LIB扩展名并包含目标代码,且静态库存放在它们特定的目录中. FORTRAN静态库在组织大型程序和在不同程序之间共享子程序等方面具有较大的优点,其重要性不言而喻. 当将静态库与主程序联系起来时,在主程序中调用静态库中的任何子程序将编译到相应的可执行程序. 应用静态库的时候,只有所需要的子程序才在编译过程中插入到可执行文件(.EXE),这意味着这种可执行文件将比包含所有的子程序所生成的可执行文件小. 而且,不必担心哪些子程序是需要的,哪些是不需要的,编译器将替你做出选择. 同时,当更改静态库中的子程序时,相应的应用程序可以不做任何改变,而只需要对其进行重新的编译链接,即可获得新的结果,这无疑也是方便的.目前,常用的FORTRAN静态库有很多种,WINDOWS操作系统下的Compaq Visual FORTRAN version 6.5(简称CVF65)自带的数学统计库IMSL就是一个非常全面的静态库,可以用来解决线性代数和统计学上的很多经典问题. 此外,在NCAR互联网站有很多有用的FORTRAN子程序(网址:/doc/167465448.html,/softlib/mathlib.html),其中包括地球物理科学问题、离散和快速Fourier变换、可分离的椭圆微分方程、插值、Legendre多项式、普通数学问题、本征值问题求解、线性方程求解、非线性方程求解、常微分方程求解、特殊函数、统计学等常用子程序集等. 这些FORTRAN子程序可以解决很多基础性的问题,因此有很高的利用价值.在WINDOWS操作系统下,可以用两个命令分别生成静态库. 一个是用‘nmake’命令,它一般用来编译原来应用在UNIX环境下的FORTRAN子程序集,在编译过程中要读取makefile文件中的编译命令,类似于在UNIX下安装软件. 另一个是用‘lib’命令,它可以在WINDOWS环境下编译任何需要集成为静态库的子程序集.编译静态库在DOS命令行环境下比较方便,以后的命令行都指在此环境下运行. 在编译静态库前,首先要安装CVF65,其次要完成要编译的FORTRAN子程序(*.f90). 对于FORTRAN子程序,最好用FORTRAN90的标准来完成,应该放弃FORTRAN77标准。
Aspen plus fortran子程序的编译、连接与运行Aspen Plus 可以用来模拟反应精馏,但提供的动力学方程形式比较死板,很多类型的动力学方程都不能直接输入,不得不外接一个fortran子程序。
本来用到fortran的机会就不多,所以会的人也不多。
何况编写好fortran子程序后,还要用fortran编译器来编译生成obj文件,而且每次运行的时候都得连接一次,比较麻烦。
我的电脑以前是装了编译器这些软件的,但最近出了问题,只能编译fortran子程序,运行aspen外接fortran子程序的时候就会出错。
恰好这几天要帮师兄写个fortran子程序,写完后需要调试,但又运行不了,重装呢也没把握,想起网上有兄弟说过可以用asplink命令生成一个dll文件,这样就不用运行aspen的时候每次都连接编译器了。
于是找来资料学习学习,居然成功了,欣喜之余,分享给大家。
第一步当然是编写动力学子程序了(此处省略若干字)第二步编译写好的动力学子程序(以网友soaty的动力学子程序为例)打开Aspen Plus Simulation Engine打开后是这样的接下来改变文件夹路径,转到存放动力学子程序的那个文件夹比如我的文件路径是C:\ProgramData\AspenTech\Aspen Plus V7.1\IPP于是输入cd C:\ProgramData\AspenTech\Aspen Plus V7.1\IPP回车后就转到这个文件夹了,这时候就可以进行编译了:编译命令:aspcomp 输入命令aspcomp RIPPA.f,回车到文件夹一看你会发现已经生成了obj文件了,第二步就完成了第三步:生成obj文件的OPT文件这个很简单,只需要在文件夹里面先新建一个文本文件,然后把名字改为RIPPA_LIST_OBJ,双击打开文本文件,在里面先添加上刚刚生成的obj文件的路径(就是我们第一步提到的那个文件夹路径加上最后生成的RIPPA.obj就可以了最后把txt格式改成opt格式就行了第四步:链接第二步生成的OBJ文件,生成dll文件命令格式:ASPLINK [DLOPT dloptfile] libnameDloptfile是在刚刚生成的OPT文件的文件名,Libname是给要生成的dll文件指定一个文件名于是我们输入asplink [dlopt RIPPA_LIST_OBJ.opt] RIPPA 回车(这里如果输入的命令是ASPLINK libname 就会链接这个文件夹下所有的OBJ文件,如果你的文件夹下刚好有多个OBJ文件,那么一般不能成功生成dll文件)第五步:生成dll文件的opt文件,和第三步类似贴个图好了,大家参考第三步把txt格式改成opt格式,这时所有的编译链接都完成了,我们就可以在没有安装fortran编译器的电脑上运行带fortran的子程序的Aspen Plus文件了首先打开BKP文件后,点击RUN——settings——Engine Files——Linker填入dll文件的OPT文件名RIPPA_LOC_DLL.opt点击确定,这时,不出意外,就可以运行aspen了注意:上面提到的这些文件必须放到一个文件夹里面,如果您下载了我的文件更改了文件夹的目录就需要在那两个OPT文件中更改成您自己的文件夹目录。
利用FORTRAN建立动态链接库的步骤如下:
1,在fortran开发环境下新建一个工程,其类型为Dynamic link libiary,,并且命名工程,编写源程序,命名,插入工程或将一个只含有函数或者子程序的fortran程序加入到project 中,编译通过即可生成DLL。
在此必须对调用的函数或子程序加以声明,以标识这些函数或子程序在所生成的DLL中是可用的。
具体语法如下:
Subroutine sub name
! MS $ ATTRTBUTES DLLEXPORT :: sub name
$ A TTRTBUTES用于声明微软扩展属性。
DLLEXPORT是上述属性之一,它的作用就是声明该函数或子程序能被其他程序或DLL调用,sub name为函数或子程序名。
2,VB调用FORTRAN DLL
用上面的程序建立动态链接库后就可以用VB调用它,在调用前,首先对被调用的DLL 模板在模块级别中进行声明,VB程序声明如下:
【Public ︳private】declare sub name lib “libname ”【alias “aliasname”】【(【arglist】)】.
声明之后在VB中使用call 语句实现调用DLL中的函数或子程序。
调用语句如下:Call sub name (arglist)。