标题:VFP编译DLL,内部各Function相互引用的问题
只看楼主
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
结帖率:100%
已结贴  问题点数:20 回复次数:3 
VFP编译DLL,内部各Function相互引用的问题
先举一个简单的示例,代码如下:
程序代码:
DEFINE CLASS mycls22 AS Session OLEPUBLIC
    PROCEDURE SqMax(ii1 as Double ,ii2 as Double) as Double
    * 取出两个参数中,较大的一个再平方 ,本过程要调用GetMax()
        LOCAL rlt as Double
        rlt = 0 
        rlt = GetMax(ii1 ,ii2)
        RETURN rlt * rlt 
    ENDPROC

    PROCEDURE GetMax(ii1 as Double ,ii2 as Double) as Double
    * 取出两个参数中,较大的一个
        IF ii1>ii2 THEN 
            RETURN ii1
        ELSE 
            RETURN ii2        
        ENDIF 
    ENDPROC

ENDDEFINE

这是一个很简单的代码, 定义了2个简单的过程,GetMax()返回两参数中的最大值,SqMax()则引用GetMax()返回的结果,并将结果再平方。
当然,这2个过程非常简单,我们这里举例只是为了说明问题,说明我们即将遇到的困扰。
如果以上代码不用 DEFINE CLASS ... ENDDEFINE 包裹,只是简单的存为PRG文件,那么 GetMax(2,4)将返回4;SqMax(2,4)将返回4的平方16,一切正常。
但是,一旦把上述代码编译为DLL文件后(编译的过程一切正常),将得到以下结果?
 SET PROCEDURE TO  "d:\fttp\proj1cls.dll"

 ox=CREATEOBJECT('proj1cls.mycls22')
?ox.GetMax(2,4)  &&  返回4,结果正常 
?ox.SqMax(2,4)  &&  出错,结果不正常 

出错图片:

=============================================
所以,我的问题是 为什么在prg文件中可以相互引用的过程,编译为DLL后,就不能了呢?有无解决的办法?
搜索更多相关主题的帖子: 编译 返回 结果 DLL Double 
2020-01-15 14:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
rlt = this.GetMax(ii1 ,ii2)
2020-01-15 15:07
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:0 
感谢!吹版确实水平高,解决了大问题。
2020-01-15 17:40
hlzcxkj
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2017-9-5
得分:0 
学习
2020-01-22 16:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498939-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.132940 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved