上回在这里看到有人发了一贴说了这个方法,我回去试了一下,真的是可以用,但是手工编译太麻烦了,于是就做了一个这个小东西,在下面的网址下载:http://www.tbns.net/m5home/soft/link.exe                16K使用上还是老方法,把原LINK.EXE改名为LINK2.EXE.不过因为水平的原因,它只能对已经保存的ActiveDLL工程正常编译.
但我还有一个问题,就是用这个方法做的DLL好像无法返回数值呀?
我做了一个DLL,其中有一个函数是这样的:
GetPsw (Hwnd As Long) as String
作用是返回当前鼠标下控件的文本,参数是此控件的句柄.但返回值一直是空.我把这个模块加到工程里去,在工程里直接调用这个函数就可以.但是由于我是做一个在NT内核下看**号的程序,如果调用SendMessage的线程与被调用的线程不是同一进程内的,调用就会失败,就是说在98下看*号的方法在NT内核系统(2K,XP,2K3,NT)下就没用了
可是我用ASM编译了一个DLL却又可以,这是为什么呢?难道VB里的这个"新DLL"还是ActiveDLL??还是无法达到C,ASM,Delphi等编译出的DLL的功能?
请知情人士解答一下?

解决方案 »

  1.   

    //调用就会失败,就是说在98下看*号的方法在NT内核系统(2K,XP,2K3,NT)下就没用了安全机制问题,参考:
    http://vip.6to23.com/nowcan1/tech/psw_view.htm
    http://vip.6to23.com/nowcan1/tech/bcb_pwd_w2k.htm
      

  2.   

    FOR rainstormmaster    感谢你的方法.
      

  3.   

    但是,还有一个问题.就是VB编制的DLL到底能不能达到C或ASM等语言编制的DLL的能力?
      

  4.   

    //但是,还有一个问题.就是VB编制的DLL到底能不能达到C或ASM等语言编制的DLL的能力?应该可以,只是你的函数返回的是字符串,有点麻烦。
      

  5.   

    //怎么说呢?是不是得用到回调?回调倒是不用,不过你的接口应该改一下:
    返回值定义为string,这给其它程序的调用带来了困难,建议这样定义接口:function GetPsw (byval Hwnd As Long,byval buff as string,byval bufflen as long) as long参数:
    Hwnd表示欲获取文字的那个窗口的句柄
    buff表示预先定义的一个缓冲区
    bufflen表示缓冲区的大小
    返回值:
    表示复制到buff的字串长度
      

  6.   

    回楼上:   这样的话,是不是该这样调用了:Dim K AS Long
    Dim PwdStr AS String * 255K=GetPwd Hwnd,PwdStr,Len(PwdStr)PwdStr里就是文本是吧?