vb6編譯教程
① 誰能教教我VB6怎麼編寫DLL,並且調用運行
在vb中製作dll文件及在vb程序中引用此文件
一、在vb中製作dll文件
(1)新建一個Active DLL工程,名字為vbTestdll,類模塊的名字為testdll
(2)在類模塊中實現一個函數,內容如下:
Public Function mydll() As String
mydll = "Hello World";
End Function
(3)保存,然後在文件菜單中選擇 Make vbtestdll.dll項,生成dll文件
二、在vb程序中使用此dll文件
(1)新建一個標准工程。
(2)在工程-引用-瀏覽里找到vbtestdll.dll文件,並且把它引入
(3)寫測試代碼,內容如下
Option Explicit
Dim test As testdll'類模塊名字
Private Sub Form_Load()
Set test= New testdll 'DLL的一個新實例
Me.Caption = test.mydll '我的標題=返回DLL的Hello World
End Sub
② 如何用VB6寫一個DLL文件,供其他程序調用謝謝@!
VB6先創建一個ActiveX DLL 工程 TestDll
在裡面加上下面的代碼
Function Test(str As String) As Boolean
Test = True
MsgBox str
End Function
編譯成activex dll即可
這個dll不是基於C++的標准動態鏈接庫,但卻是應用開發效率很高的activeX dll,此控制項可以被MFC、Delphi、網頁上的javascript和vbscript、vc++所調用和使用。
你可以自己用著試試,工程菜單里點引用,用法與其它語言編的activeX dll用法相同。然後寫
TestDll.Test "hello world!"
或者
Dim a As TestDll
set a = New TestDll
a.Test "hello world!"
所以樓上說VB6做不到是很不負責任的,畢竟VB在14年以前1996年就能做此事了。尤其現在幾乎所有語言都是寫面向對象的程序,像vb這種類似activex組件式的程序已被廣泛用於C#、VB.Net等。 而標准dll只不過是面向結構化編程的函數庫,屬於上一代理念或底層開發的使用了。
③ vb6怎麼在代碼中執行編譯命令
你說的有點像外*掛中間的腳本,可以讓使用者自己編寫一段代碼,程序可以執行。
但是編譯成exe就不現實了,只要能執行腳本不就行了嗎?
VB語言可以實現這一功能,VB利用Microsoft Script Control對象可以動態執行(即無需事先編譯成EXE)VBS指令,代碼如下:
窗體放一個多行文本框和一個按鈕。
PrivateSubCommand1_Click()
DimScriptControlAsObject,Psw$
SetScriptControl=CreateObject("MSScriptControl.ScriptControl")
ScriptControl.Language="VBScript"
ScriptControl.Timeout=-1
ScriptControl.AddCodeText1.Text
Psw=ScriptControl.Run("encodePwd")
MsgBoxPsw
EndSub
PrivateSubForm_Load()
Text1.Text="FunctionencodePwd()"&vbCrLf&_
"encodePwd=""這是返回字元串"""&vbCrLf&_
"EndFunction"
EndSub
④ vb怎麼做個vb編譯器
如果你要自己做程序編譯的話很難,就算調用c2.exe和link.exe也沒用,因為VB
在調用之前已經在臨時目錄下生成了一堆看不懂的東西。
但你可以調用VB主程序的命令行來生成程序,如你要生成的程序在D盤根目錄,工程文件為
1.vbp那你可以在CMD里打VB6.exe /make D:\1.vbp
具體的可以參照VB6.exe /?
附:
VB的編譯過程大致如下,當我們在編輯環境中編寫完代碼後,VB調用C2將所有的模塊(包括CLASS)編譯成OBJ文件(能夠為機器語言識別的代碼)。一下是C2的一些編譯參數說明(E文):
- the the name of the prefixed one used for the names of the rowscontaining ' precompilato', one
risen of intermediate tails (from which name of the switch) temporary; these rows are 5 and finish withi suffissi GL, SY, FORMER, IN and DB; they contained are not documented
- f the name of the rows to compile
- W3 warning level 3, level of ' attenzione' dedicating to i warnings
- Gy it qualifies the connection to level of function (function-level linking)
- G5 optimization for the Pentium
- Gs4096 it allows not to insert the code for the control of stack (stack probe) if a function does not
use more than 4096 byte of stack
- dos not documented
- Z1 it removes the name of the bookcase of default from the rows.OBJ
- Fofileobj the name of rows OBJ to generate (rows output)
- Qifdiv it puts in action the corrections for the bug of the division of the Pentium (FDIV bug)
- MILILITER it creates rows eseguibile single-threaded
- basic it indicates the compiler C2 the fact that the compilation it happens for a plan basic
C2完成編譯後,VB會調用LINK.EXE將所有的OBJ文件連接成EXE文件,完成編譯過程。下面是一段命令行演示如何調用LINK.EXE:
LINK C:\Test\Form1.obj C:\Test\Molo1.obj C:\Test\Progetto1.obj C:\Programmi\Microsoft Visual Studio\VB98\VBAEXE6.lib /ENTRY:__ vbaS /OUT:C:\Test\Progetto1.exe /BASE:0x400000 /SUBSYSTEM:WINDOWS, 4.0 /VERSION:1.0 /DEBUG /DEBUGTYPE:CV /INCREMENTAL:NOT /OPT:REF/MERGE:.rdata =.text /IGNORE:4078
對於我們來說這些參數沒有什麼意義,用默認的就行了。這段命令行中並沒有包括輸出函數,如果我們希望輸出函數,可以定義一個.def文件,按照格式加入要輸出的函數列表,然後在命令行後面加上 「/DEF: 文件名」(當然也可以直接加/ EXPORTS參數),再調用命令行編譯,用的denpendency工具查看你就會發現你要輸出的函數了。
Def文件格式的定義:
LIBRARY 程序名稱
DESCRIPTION "MyDLL - (C) Antonio Giuliana, 2004"
EXPORTS
函數名= ?函數名@函數所在模塊名@@AAGXXZ
…
例:
LIBRARY MyDLL
DESCRIPTION "MyDLL - (C) Antonio Giuliana, 2004"
EXPORTS
DllRegisterServer= ?DllRegisterServer@SymExp@@AAGXXZ
DllUnregisterServer= ?DllUnregisterServer@SymExp@@AAGXXZ
注意:函數名和模塊名是區分大小寫的
我先用Vb編一個截取C2、LINK命令的程序:
C2:
Private Sub Form_Load()
f = UCase$(Left$(Command$, 256))
Open "E:\C2.txt" For Output As #1
Print #1, f
Close
End
End Sub
LINK:
Private Sub Form_Load()
f = UCase$(Left$(Command$, 256))
Open "E:\C2.txt" For Output As #1
Print #1, f
Close
End
End Sub
生成EXE後把VB98下的c2與LINK剪切到別處,在用這兩個程序代替。運行VB6.exe,隨意打開一個工程,點文件菜單,生成EXE。
不久我編的兩個程序就送給我夢寐以求的文件:
E:\C2.txt
-IL "C:\DOCUME~1\ADMINI~1\LOCALS~1\TEMP\VB381884" -F "E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\新建文件夾 (2)\FORM1.FRM" -W 3 -GY -G5 -GS4096 -DOS -ZL -FO"E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\FORM1.OBJ" -QIFDIV -ML -BASIC
E:\LINK.txt
"E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\FORM1.OBJ" "E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\LINK.OBJ" "E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\VBAEXE6.LIB" /ENTRY:__VBAS /OUT:"E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\LINK.EXE" /BASE:0X400000 /SUBS
這兩個TXT就是VB送給c2以及LINK的命令。
詳細解讀如下:
C2.txt
-IL "C:\DOCUME~1\ADMINI~1\LOCALS~1\TEMP\VB381884" -F "E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\新建文件夾 (2)\FORM1.FRM"是c2准備處理的兩個文件。 -W 3 -GY -G5 -GS4096 -DOS -ZL是c2生成OBJ的格式,後邊則是OBJ文件的地址。
LINK.txt
"E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\FORM1.OBJ" "E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\LINK.OBJ"是源文件。"E:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\VBAEXE6.LIB"是轉換庫。後面是EXE文件地址及格式