vb制作可输出函数的通用DLL---VB_DLL_Link用法
生活随笔
收集整理的這篇文章主要介紹了
vb制作可输出函数的通用DLL---VB_DLL_Link用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
vb制作可輸出函數的通用DLL---VB_DLL_Link用法
論壇越來越多人關注dll,特分享一下vb制作可輸出函數的通用DLL---VB_DLL_Link用法? ? 大家知道,VB6只能制作ActiveX DLL文件,制作能輸出函數的通用DLL文件通常要用到VC等工具。實際上,VB在編譯的時候加以控制,經過適當處理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB編譯出通用的DLL文件,此DLL文件可以被其他程序調用,例如在VB中用Declare語句調用并執行DLL中的函數。下面介紹VB_DLL_Link的使用方法:
1、安裝:
本軟件為純綠色軟件。下載VB_DLL_Link.exe后,雙擊它就可以自動安裝了。你也可以手動將它復制到VB6程序目錄下,將原Link.exe改名為Link2.exe,再將VB_DLL_Link.exe改名為Link.exe即可。
2、生成DLL:
安裝好VB_DLL_Link后,打開VB6,新建標準exe工程,工程菜單>>移除Form1,添加一個標準模塊如Module1.bas,首先向其中寫入DLL的入口代碼:
Function DLLMain(ByVal hInstDLL As Long, ByVal fdwReason As Long, ByVal lpwReserved As Long) As Long
? ? DLLMain = 1
End Function
注意參數形式一定要正確,否則編譯失敗。高級編程時這些參數很有用。在首次調用DLL和調用DLL的原程序退出時均會執行DLLMain函數。這個函數是必須的。
為了使VB不報錯,還需加入以下代碼:
Sub Main()
? ? '確保VB能編譯
End Sub
然后就可以向Module1.bas中寫入自定義函數代碼了,如:
Function Add(ByVal A As Double, ByVal B As Double) As Double
? ? MsgBox A + B
? ? Add = A + B
End Function
Private Sub M(s As String)
? ? MsgBox s, vbInformation
End Sub
編寫好代碼后,保存工程,選擇文件菜單>>生成exe,注意將文件擴展名改為.dll,否則本軟件不能調出。然后本程序就會運行,出現一個對話框提示選擇此工程需要導出的函數所在的模塊文件,此例即Module1.bas,選擇好后本程序主窗口會列出Module1.bas中所有的函數名。如果有多個模塊,可以選擇"從模塊添加"按鈕繼續添加函數名。"添加函數名"按鈕可手動添加現存的函數的名稱。然后勾選需要導出的函數名,點擊"編譯為能輸出函數的DLL"按鈕,即可編譯出通用DLL文件了,它能輸出函數列表中打勾的所有函數。若不需要編譯為通用DLL,請點擊"常規編譯"或按Esc鍵。
3、應用DLL:
編譯好的通用DLL文件,可按常規DLL文件的調用方法加以調用。如上述的例子在VB中調用方法如下(請將Lib后的字符串改為上面編譯的Dll文件名):
Private Declare Function Add Lib "編譯好的DLL文件的路徑及名稱" (ByVal A As Double, ByVal B As Double) As Double
Private Declare Sub M Lib "編譯好的DLL文件的路徑及名稱" (s As String)
Private Sub main()
? ? Add 9, 2? ? '調用DLL中的函數
? ? M StrConv("By 同濟黃正", vbUnicode) '字符串需轉換成Unicode再傳遞
End Sub 比如下面的問題: 看了你的《vb制作可輸出函數的通用DLL---VB_DLL_Link用法》,按照這個方法我生成了lib,dll文件,可是在vc里使用的時候函數的功能并不能實現
我的代碼是:
? typedef double(*lpAddFun)(double,double);
??????? HINSTANCE hDll;
??????? lpAddFun addFun;
??????? hDll=LoadLibrary("c://project.dll");
??????? if(hDll!=NULL)
??????? {
??????????????? addFun=(lpAddFun)GetProcAddress(hDll,"Add");
??????????????? if(addFun!=NULL)
??????????????? {
??????????????????????? double result=addFun(1,2);
??????????????????????? CString str;
??????????????????????? str.Format("%f",result);
??????????????????????? MessageBox(str);
??????????????? }
??????? }
??????? FreeLibrary(hDll); double result=addFun(1,2);在這里出錯,也就是不能返回值
能告訴我這是怎么回事嗎?
最好詳細一點!!
還有LIB和DLL放的位置和調用有什么 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的vb制作可输出函数的通用DLL---VB_DLL_Link用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc6.0快捷键大全- -
- 下一篇: Windows系统编程之进程间通信