天天看點

MFC 調用VB dll

首先來說說VB調用VB生成的DLL

1. 打開VB 程式,File > New Project

2. 在New Project的對話框中選擇 ActiveX DLL 圖示,VB會自動添加一個Class,名字為Class1

3. 在Project Window(不是菜單欄)選中這個Class1,然後在Properties Window下,輕按兩下 Name,然後修改為VBDll,表示我們将要生成的是VBDLL的Class

4. 在Project Window(不是菜單欄)選中Project1,然後在Properties Window下,輕按兩下 Name,然後修改為DLLProject

5. 儲存檔案和項目,生成兩個檔案VBDll.cls 和 DLLProject.vbp。

6. 在VBDLL.cls裡面寫下如下的代碼

Public Function fun1() As String

    fun1 = "Congratulations! This is your first VB ActiveX DLL!"

End Function

Public Sub fun2()

  MsgBox “Hello!”

End Sub

7. 儲存VBDLL.cls,然後File > Make DLLProject.dll, 經過Compile之後生成以Project的名字命名的DLL,為DLLProject.dll和 DLLProject.lib 兩個檔案

8. 關閉上面的DLLProject,然後File > New Project > 選擇 Standard EXE

9. VB首先要引用前面建立的DLLProject.dll

Project菜單欄 > References > 添加前面建立的 DLLProject.dll,然後添加如下的代碼:

Option Explicit

Private Sub Form_Load()

    Dim testdll As VBDLL

    Set testdll = New VBDLL 'DLL的一個新執行個體

    MsgBox testdll.fun1

End Sub

              Rem 此時引用的是DLLProject.dll 但是Class是VBDLL。

注:為什麼不可以像前面VB調用VC生成的的DLL那樣,用 Declare 來引用呢?因為VB生成的DLL不是标準的DLL,是以隻能從Project>Reference來引用。

    再說說VC來調用VB生成的DLL

 在MFC中有一種友善的方法,就是通過ClassWizard利用類型庫生成包裝類,不過有個前提就是com元件的接口必須是派生自IDispatch  

  具體方法:  

  按Ctrl+W調出類向導,按Add   Class按鈕彈出新菜單,選From   a   type   libarary,然後定位到DLLProject.dll,接下來會出現該DLLProject.dll中的所有接口,選擇你成的接口包裝類_VBDll後,向導會自動生成相應的.cpp和.h檔案.   這樣你就可以在你的MFC工程中像使用普通類那樣使用COM元件了.  

void CMainFrame::OnMKitHelp()

{

 // TODO: Add your command handler code here

 _VBDll VbClass;

CoInitialize(NULL);  

 if   (VbClass.CreateDispatch("DLLProject.VBDll")   !=   0)  

 {  

   VbClass.fun2();  

  VbClass.ReleaseDispatch(); 

 }   

 CoUninitialize(); 

 return ;

}