- 积分
- 0
- 注册时间
- 2007-5-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
紧急求救!--关于用VC调用VF动态链接库的问题,急急啊!
关于用VC调用VF动态链接库的问题,急急啊!
请教高手:我在vc++中调用vf写的动态链接库dll时碰到这样一个问题,当在vf中调用了sin函数时,
做成的dll不能在vc中运行,但是当把sin函数去掉时,做成的dll文件可以在vc中运行,而在vf里常用到一些内部函数,
关于这个问题我找了很多资料也得不到解决,所请高手指教,fortran程序如下:
SUBROUTINE aaa(a,b,c)
$ATTRIBUTES DLLEXPORT :: aaa
$ATTRIBUTES VALUE :: b
INTEGER a,i,j
REAL(4) c(2)
real,INTRINSIC :: SIN
c(1)=a*1.0
c(2)=SIN(b*3.14159/180.)
END SUBROUTINE
另:如果把sin函数中的b换成数值1.0,做成的动态链接库也可以运行。
首先谢谢各位的赐教,不胜感激!
我的邮箱是: qiangliu@iflytek.com
0551-5331887
-----------------------------------
具体程序如下:
在fortran 里指定了a,b是用值传递,而c是地址传递
SUBROUTINE BBB(a,b,c)
!DEC$ATTRIBUTES DLLEXPORT :: BBB
INTEGER a
REAL b,c(2)
!DEC$ATTRIBUTES VALUE :: a
!DEC$ATTRIBUTES VALUE :: b
!DEC$ATTRIBUTES REFERENCE :: c
INTEGER i,j
real,INTRINSIC :: SIN
c(1)=a*1.0
c(2)=SIN(b*3.14159/180.)
END SUBROUTINE
在vc中调用如下:
HINSTANCE hIns;
hIns = LoadLibraryEx("aaa.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);
typedef int (*MYPROC)(int &a, float b, float c[2]);
MYPROC fun= (MYPROC)GetProcAddress(hIns,"_BBB@12");
int a=5;
float b=float(4.2) ;
float c[2] ;
fun(a,b,c);
// a=b;
CString str;
str.Format("%f",c[1]);
MessageBox(str);
如有不明白的地方,和我联系哦,这个问题困饶好长时间没有解决,望各位大侠能够帮忙一下!首先感谢了啊! |
|