我做了一个关于系统右键菜单的DLL,实现了类似金山毒霸的功能,不过只是用于一次拷贝多个文件夹或文件,与金山毒霸在系统右键菜单上的工作原理稍有不一样,他是点击了菜单后shell执行金山毒霸,而我设计是点击了选项后弹出自定义的保存文件对话表单,而且不是SHELL执行,所有代码(包括临时弹出的FORM)集中在了DLL里,问题就这样出现了:
1、在REGSVR32进行系统注册时出现一些“REGSVR32非法操作”的信息,但同样注册成功,而且使用相当正常(我设计的功能全部实现),反注册时也出现类似情况,但同样能成功的卸掉DLL实在搞不懂,我将自己的代码看了好几十遍也没发现致命的错误,希望哪位仁兄遇到过类似情况或能解决的帮我想一下原因。
2、我在DLL弹出的FORM中如果使用SHOWMESSAGE(),系统就会蹦溃(无论是W2000还是98),搞的我都不敢在这个程序里用SHOWMESSAGE()
3、编译过程中没有任何错误

解决方案 »

  1.   

    Nicrosoft:
      据您估计,注册和反注册过程中的错误信息的源头应该是什么?
      

  2.   

    你看一下,你的dll中的导出函数的调用规则,一般声明为 stdcall; 而且客户端也必须声明成stdcall。
      

  3.   

    up
    ShareMen这个东西曾经害死我过。
    它是Delphi释放DLL调用的一个东东。没有它程序一般都会崩。
      

  4.   

    谢谢各位,我的问题已解决,是这样:
        我在让客户选择目录时使用了SelectDirectory,我当时从DELPHI自带的帮助中查到用这个函数需要USE QDIALOGS,于是我照作了,结果,呵呵,生成的DLL虽然在编译过程中没有任何错误,但只能在装有DELPHI的机器上注册,而且注册过程中也会出现内存读取错误信息,却不影响该DLL的使用,可是,在没有安装DELPHI的机器上却不能用REGSVR32注册,为了解决这个问题,我将自己写的代码一行一行的检查,都没有发现什么调用错误,只好,将代码拆开来测试.....发现原来是使用了QDIALOGS单元就会出错,后来我在翻以往大家在CSDN上发的帖子时偶尔发现use FileCtrl也一样可以使用SelectDirectory,于是我将USE QDIALOGS改成了use FileCtrl,结果,一个头痛我几天的问题就这样解决了....将这个问题的解决方法写出来,希望如果哪位朋友也遇到类似问题就不用花我这么多时间了....
    另外谢谢跟贴的朋友
      

  5.   

    也不知道这算不算DELPHI的小BUG,这样吧,欢迎朋友们在这贴里发表一些用DELPHI时人没有犯原则性错误却被编译器或DELPHI帮助玩了一把的问题在这里发表,反正我也开了100分,不如就给提出这些问题的同道们算了,也好让大家少走弯路