我自己编译的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编辑过]