1、请问个位,怎样在自己程序中向自己做的DLL中传替一个参数了,比如向DLL中传替程序中的一个变量值供DLL中的函数使用,2、在自做的DLL中可否做一个事件,让程序在此事件中写代码。比如我在DLL中写一个监视按键的函数,只要按一下键,就引起一个事件。而我可以在自己的程序中(非次DLL中)处理此事件。

解决方案 »

  1.   

    你提的第一个问题真的很怪,既然是函数,直接传参数不行吗?如果是用VB去作ActiveX dll的话,也可以使用属性的方式去作啊。
    至于你的第二个问题,首先要在你的dll中定义事件,并且在适当的时机去激发它,具体的方法和作ActiveX控件没有什么两样,用event去定义,用raiseevent去fire一个事件。然后就是在使用这个dll的程序中,和普通的dim obj as something不同,需要在前面加上withevents,这样VB的IDE环境中就会出现你定义的这个对象名(就像一个TextBox一样),后面也会出现几个事件,具体的可以参看MSDN中以withevents为关键字的文章和介绍。
      

  2.   

    谢谢各位的指点,再问一下怎样用VB才能做键盘全局HOOK,我把下面的代码封进标准的DLL为什么不行,我把封装的代码改为VB的就是这样。
    ----------------------------------------------
    Private Const WH_KEYBOARD As Long = 2Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
    Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As LongDim OldHook As Long
    Dim StrSave As StringPrivate Sub Main()
       
    End SubPublic Function SetHook(LngAddressHook As Long, LnghInstance As Long) As Long
     OldHook = SetWindowsHookEx(WH_KEYBOARD, LngAddressHook, LnghInstance, 0)
    End FunctionPublic Sub UnloadHook()
     UnhookWindowsHookEx OldHook
    End SubPublic Function KeyBoardHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     
       KeyBoardHook = CallNextHookEx(OldHook, nCode, wParam, ByVal lParam)End FunctionPublic Sub Save()
     Dim IntFile As Integer
    MsgBox "save"
     IntFile = FreeFile
      Open "c:\Key.txt" For Output As #IntFile
        Print #IntFile, StrSave & "ok"
      Close #IntFile
       StrSave = ""
    End Sub
    -----------------------------------------------
     下面是我程序中的代码:
    Private Sub Form_Load()
     LngHdll = LoadLibrary(App.Path & "\KeyHook.dll")
     LngAddressHook = GetProcAddress(LngHdll, "KeyBoardHook")
     LngRet = SetHook(LngAddressHook, LngHdll)
    end subPrivate Sub Form_Unload(Cancel As Integer)
     FreeLibrary LngHdll
     Call UnhookWindowsHookEx(OldHook)
      Save
    End Sub
    -------------------------------------------------------
      请问个位大哥,为什么这样也只能监视本程序的按键,而不是全局的。请指教!!!
      

  3.   

    还有就是怎么区分标准的DLL和ACTIVE DLL啊!!!谢谢!!!