找回密码
 注册
Simdroid-非首页
查看: 190|回复: 4

[2. C/C++/C#] 【求助】如何在VF中调用动态链接库

[复制链接]
发表于 2004-4-28 22:22:56 | 显示全部楼层 |阅读模式 来自 德国
需要调用ansys中的dll文件,其中包含了一些所需的外部函数。不知在VF中如何调用这个dll文件。
编程方面外行,问题简单,见笑。
  
补充一下:这个dll文件应该也是fortran77生成的。尝试将这个文件拷贝到windows\,windows\system,windows\system32,Microsoft Visual Studio\DF98\LIB下,在link主程序的时候报错,应该包含在dll中的几个外部函数都没有找到。
发表于 2004-4-29 04:37:04 | 显示全部楼层 来自 美国

回复: 【求助】如何在VF中调用动态链接库

Simdroid开发平台
你知道这些dll中包含的函数名(这个容易)和变元么?亦即接口方式你知道么?不知道是没法用的。
 楼主| 发表于 2004-4-29 17:17:56 | 显示全部楼层 来自 德国

回复: 【求助】如何在VF中调用动态链接库

函数及其参数都已经知道。因为这个程序是以前在HP UNIX平台上写的,现在需要移植到windows上。源程序中带有一个从ansys中带来的binlib.a的库文件,我现在把binlib.dll也拷贝过来。外部函数应该包含在这里面。
在FORTRAN的源代码里有类似:
I = SYSIQR(0,NAME,LENFNM,'EXIST')
的语句,
在build的过程中报错:
readrst.obj : error LNK2001: unresolved external symbol _SYSIQR@24
关于SYSIQR函数的解释,在手册中可以查到。
另外,.a和.dll文件有什么不同吗?
  
多谢解答。
发表于 2004-4-29 22:09:06 | 显示全部楼层 来自 美国

回复: 【求助】如何在VF中调用动态链接库

调用方式参考如下示例,testsub.dll中有函数SUBA,接口用rtn_suba(a,b)别名来调用SUBA函数。
  
  1. ! Sample Fortran program that finds a dll library and calls
  2. !  a routine in it.
  3. use kernel32
  4. ! Declare an interface block to the routine to be called.
  5. interface
  6.    subroutine rtn_suba(a, b)
  7.    real*8 a, b
  8.    end subroutine
  9. end interface
  10.   
  11. real *8 arg1, arg2
  12. integer p   
  13. pointer (q,rtn_suba)
  14. logical status
  15.   
  16. ! First, locate the dll and load it into memory
  17. p = loadlibrary("testsub.dll"C)
  18. if (p == 0) then
  19.    type *, "Error occurred opening testsub.dll"
  20.    type *, "Program aborting"
  21.    goto 1000
  22. endif
  23.   
  24. ! Set up a pointer to the routine of interest
  25. q = getprocaddress(p, "SUBA"C)
  26. if (q == 0) then
  27.    type *, "Error occurred finding SUBA in testsub.dll"
  28.    type *, "Program aborting"
  29.    goto 1000
  30. endif
  31.   
  32. ! Now, the routine can simply be called
  33. call rtn_suba(arg1, arg2)
  34. write(*,*)arg1, arg2
  35. status = freelibrary(p)
  36. type *, "freelibrary status was: ", status
  37.   
  38. 1000  continue
  39. end
复制代码

  
对NIX我不熟,不知道.a与.DLL的区别。
 楼主| 发表于 2004-4-30 17:26:54 | 显示全部楼层 来自 德国

回复: 【求助】如何在VF中调用动态链接库

多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 05:41 , Processed in 0.029022 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表