在C++ Builder中调用FORTRAN生成的DLL
2005-04-07 07:56
330 查看
1. Fortran中的函数定义形式
subroutine add1[dllexport](p1,p2,p3)
p3=p1+p2
end subroutine add1
2. DLL中函数名的检查
用Tdump.exe检查*.dll文件,得到DLL文件中的函数名,例如:
_ADD1@12
3. 在Borland C++ Builder中调用DLL
两种方式:静态引入,动态引入,或者称为隐式连接(implicit linked),显示连接(explicit linked)。
使用显示连接的方法是使用Windows的API(如LoadLibrary函数)来载入DLL,用FreeLibrary函数来释放DLL,用GetProcAddress来取得函数的地址,再呼叫该函数,使用之后释放。使用显示连接的优点在于,你可以完全控制该DLL的载入和释放,最有效地利用系统资源。在调用失败时,程序可以继续运行,进行处理。
隐式连接的方法是通过project/add to project将 Dll.LIB加入到工程文件中,这种方法需要代码少,但是占用系统资源多。
4. 显示连接的方法
首先,在C++ Builder中,如Lib.h文件中声明函数:
void _stdcall(*Add1)(float*,float*,float*);
然后,在程序中调用DLL文件,例如Lib.DLL。
HINSTANCE hInst;
hInst=LoadLibrary("TestFor1.Dll");
if(NULL==hInst) Output("Load Dll Error!");
else
{
Output("Load Dll Ok!");
(FARPROC&)Add1=GetProcAddress(hInst,"_ADD1@12");
if(Add1==NULL)
{
Output("Open Dll Function Failed!");
}
else
{
Output("Open Dll Function Ok!");
}
}
5. 调用函数的方法
例程如下:
float p1,p2,p3;
p1=1.0;
p2=2.0;
p3=0.0;
AnsiString s;
Add1(&p1,&p2,&p3);
s=FormatFloat("0.0",p3);
Output("计算结果:"+s);
subroutine add1[dllexport](p1,p2,p3)
p3=p1+p2
end subroutine add1
2. DLL中函数名的检查
用Tdump.exe检查*.dll文件,得到DLL文件中的函数名,例如:
_ADD1@12
3. 在Borland C++ Builder中调用DLL
两种方式:静态引入,动态引入,或者称为隐式连接(implicit linked),显示连接(explicit linked)。
使用显示连接的方法是使用Windows的API(如LoadLibrary函数)来载入DLL,用FreeLibrary函数来释放DLL,用GetProcAddress来取得函数的地址,再呼叫该函数,使用之后释放。使用显示连接的优点在于,你可以完全控制该DLL的载入和释放,最有效地利用系统资源。在调用失败时,程序可以继续运行,进行处理。
隐式连接的方法是通过project/add to project将 Dll.LIB加入到工程文件中,这种方法需要代码少,但是占用系统资源多。
4. 显示连接的方法
首先,在C++ Builder中,如Lib.h文件中声明函数:
void _stdcall(*Add1)(float*,float*,float*);
然后,在程序中调用DLL文件,例如Lib.DLL。
HINSTANCE hInst;
hInst=LoadLibrary("TestFor1.Dll");
if(NULL==hInst) Output("Load Dll Error!");
else
{
Output("Load Dll Ok!");
(FARPROC&)Add1=GetProcAddress(hInst,"_ADD1@12");
if(Add1==NULL)
{
Output("Open Dll Function Failed!");
}
else
{
Output("Open Dll Function Ok!");
}
}
5. 调用函数的方法
例程如下:
float p1,p2,p3;
p1=1.0;
p2=2.0;
p3=0.0;
AnsiString s;
Add1(&p1,&p2,&p3);
s=FormatFloat("0.0",p3);
Output("计算结果:"+s);
相关文章推荐
- 在VC中调用fortran生成的dll
- C# 调用GDAL编写的动态链接库dll,后不能将生成的图像显示到picturebox上,显示内存不足
- Qt调用qt生成的dll 显式和隐式(静态动态)
- C#调用外部C++生成DLL
- C++生成调用dll方法
- 在vb和asp中调用c#生成的.net的dll
- [2014.1.31] Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- vc调用matlab生成的dll实例
- 如何在Delphi 中调用C#生成的DLL类库
- 本文是关于使用C++调用Matlab编译生成的Dll的说明
- 如何生成DLL文件并导出函数及如何在C++或C#中调用DLL中导出的函数
- 在vs中用C的编程方式生成.dll文件并且动态、静态调用dll中的函数
- Visual Studio中调用matlab生成的dll
- MinGw 生成Dll的连接库 无参数调用
- VS2012 C#生成DLL并调用
- Delphi 调用VC生成的DLL
- VC 调用 MinGW 生成的dll
- C#调用Matlab生成的dll方法的详细说明
- C#调用C语言生成的DLL示例
- C#调用C++生成的Dll库,Dll使用callback向C#传递指针