标题:我自己编译的dll,在vfp环境里可以使用,但是脱离vfp后提示“找不到DLL类定 ...
取消只看楼主
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
结帖率:0
已结贴  问题点数:20 回复次数:5 
我自己编译的dll,在vfp环境里可以使用,但是脱离vfp后提示“找不到DLL类定义”
一、开发环境:win7环境编程,vfp版本是sp2.
二、运行环境:msvcr71.dll、vfp9r.dll、vfp9rchs.dll、vfp9t.dll、GdiPlus.dll 已一同发布
三、测试环境:win7、xp 共5台电脑
四、测试过程:
             1.win7开发环境内可以直接运行。
             2.同一台win7电脑非vfp环境带运行库,需手动注册才能运行。编写的bat文件可以正常注册运行。
             3.换其他电脑,xp环境,安装过vfp的可以通过cmd注册成功。
             4.xp环境,没安装过vfp的反复提示注册不成功。
             5.电脑系统不同,但是提示错误都是注册不成功!
             6.网上的解决方案基本试遍了!

五、提示错误:“找不到DLL类定义”。

六、代码部分:
1.dll中定义类:DEFINE CLASS MainDll AS Session OLEPUBLIC
2.EXE调用dll:
             sFilePath='mydll.dll'
             RUN /n regsvr32 /s (sFilePath) &&这里就是注册,但是不成功!
3.cmd手动注册代码:regsvr32 mydll.dll
4.bat批处理注册代码:regsvr32 %~dp0mydll.dll
5.mydll简易实例代码:
DEFINE CLASS MainDll AS Session OLEPUBLIC

*!*    只是做了简易实例,为了说明相关问题

    PROCEDURE shili
    LPARAMETERS sOriginalValue,nFlag

    DO case
    CASE nFlag==1
        ?'简易实例1:',sOriginalValue
    CASE nFlag==2
        ?'简易实例2:',sOriginalValue
    ENDCASE

    ENDPROC

*!*    下面有调用自身 MainDll 的命令,但是应该不是这个问题也做省略!

ENDDEFINE

6.附上文连编dll,已上传。
mydll1.dll:是单线程连编的
mydll2.dll:是多线程连编的
mydll.rar (21 KB)


七、错误提示如下图:


八、灵异事件:
1.开始不能注册的电脑都能注册dll了。(试的方式比较多,怎么成功的我也蒙!)。
2.如果安装目录是“abc\”,把安装目录名改为“abcd\”,也就是更改了安装目录名。然后右键dll注册,还是能注册,但是运行EXE后,却找不到dll里的控件对象。(备注:dll文件就在安装目录里!)
3.即使反注册后再注册也不行!

九、求解决方案

谢谢!

[此贴子已经被作者于2019-1-9 17:24编辑过]

搜索更多相关主题的帖子: dll vfp 环境 提示 注册 
2019-01-07 16:25
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
得分:0 
回复 2楼 吹水佬
上面的代码就是注册代码。但是也不行。
我是win7环境编程,vfp版本是sp2.
我在win7电脑上写bat都可以注册成功。但是换了xp或者其他电脑后,cmd注册都不行!
2019-01-07 20:25
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
得分:0 
回复 4楼 吹水佬
老哥,还是不行,用您的代码提示是“调用_RegServer()失败,试用管理员身份运行。”。
现上传DLL简洁事例说明。

mydll.dll中的简易事例代码如下:
DEFINE CLASS MainDll AS Session OLEPUBLIC

*!*    只是做了简易实例,为了说明相关问题

    PROCEDURE shili
    LPARAMETERS sOriginalValue,nFlag

    DO case
    CASE nFlag==1
        ?'简易实例1:',sOriginalValue
    CASE nFlag==2
        ?'简易实例2:',sOriginalValue
    ENDCASE

    ENDPROC

*!*    下面有调用自身 MainDll 的命令,但是应该不是这个问题也做省略!

ENDDEFINE

同时将上述代码连编成dll,同时在附件中已经上传。
mydll1.dll:是单线程连编的
mydll2.dll:是多线程连编的
mydll.rar (21.01 KB)


[此贴子已经被作者于2019-1-8 10:16编辑过]

2019-01-08 10:08
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
得分:0 
回复 6楼 吹水佬
老哥,DLL里面的问号就是做个演示,真实的代码里没有问号。
如果您说没问题的话,那我就基本绝望了。
因为网上的所有方案,我基本试遍了!

2019-01-08 11:33
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
得分:0 
回复 8楼 厨师王德榜
要是dll编写的有问题的话,也不应该有的电脑可以,有的电脑不行的情况呀。
并且开始不行的电脑,不知道怎么弄的,后来又都可以注册了。但是过程很麻烦。有时候还是蒙对了。

是不是和vfp的版本有关系呀?
我用的是vfp9  sp2的版本
是不是这个版本存在问题?

老哥您是用什么版本,什么开发和测试环境来做dll的?
2019-01-08 21:53
unnu
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-3
得分:0 
回复 10楼 吹水佬
现在是我这各种怪异的现象发生了!

开始不能注册的电脑都能注册dll了。可是具体是怎么注册并能使用的并不清楚。
更有意思的是:如果安装目录是abc\,把安装目录名改为abcd\,也就是换个目录名,右键dll注册,还是能注册,但是运行EXE后,却找不到dll里的控件对象。即使反注册后再注册也不行!(备注:dll文件就在安装目录里!)

各位老哥碰到过这样的情况吗?还是我的操作哪里有问题?

[此贴子已经被作者于2019-1-9 17:05编辑过]

2019-01-09 16:42



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




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

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