網上搜了一下,知道怎么用vb制作標準dll,但是現在我想做的標準dll是有1個自定義資料型別的傳遞引數,請問該怎么做這個dll。謝謝大神們指點迷津。
PS:VC一點不會,只會一點VB。
uj5u.com熱心網友回復:
VB制作的所謂“標準”dll,只能由VB程式呼叫,不能被別的語言的程式呼叫。制作標準dll的原理是,通過替換聯結器的引數,讓聯結器將標準模塊的函式作為匯出函式輸出。但是因為VB是閉源的,沒有人能夠真正修改VB的編譯器和運行時。而VB產生的程式,無論dll還是exe都需要VB虛擬機的支持,即便是本地代碼。
用VB撰寫的“標準”dll,因為仍然依賴VB虛擬機,并且缺少必要的初始化,所以無法正常運行。除非呼叫dll的是VB程式,因為在此之前,VB虛擬機已經被程式初始化過了。
uj5u.com熱心網友回復:
總之,用VB制作所謂的標準dll毫無意義。建議你不要在此浪費時間了。uj5u.com熱心網友回復:
是啊。我只會一點VB,做的dll只用VB來呼叫,能做嗎?做Active DLL,在標準模塊里寫函式,編譯時老是提示不能用自定義型別作為引數,怎么搞定?uj5u.com熱心網友回復:
正常寫有出什么問題嗎uj5u.com熱心網友回復:
打個比方吧,先新建ActiveX DLL,在類模塊里
Type Student
Name As String
ID As String
Sex As Boolean
End Type
在標準模塊里
Public Function FindStudent(ByRef AStudent As Student)
AStudent.Name = "Mike"
AStudent.ID = "10000"
AStudent.Sex = 1
End Function
編譯生成標準DLL,UDCDll.dll,然后新建EXE,在標準模塊里
Type Student
Name As String
ID As String
Sex As Boolean
End Type
Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (ByRef AStudent As Student)
在表單里
Private Sub Command1_Click()
Dim ABC As Student
Call FindStudent(ABC)
Label1.Caption = ABC.Name
Label2.Caption = ABC.ID
Label3.Caption = ABC.Sex
End Sub
運行時點擊按鈕,什么報錯資訊和運行結果都沒有,VB視窗直接就關掉了。
本人VB很菜,不知哪兒有問題,還請指點,謝謝。
uj5u.com熱心網友回復:
看看這個附件能不能用(我沒試過)http://download.csdn.net/download/dsq2006/1763933
uj5u.com熱心網友回復:
百度 vb_dll_link 試試uj5u.com熱心網友回復:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Optional ByVal Length As Long = 4)Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (Byval AStudent As long)
Dim ABC As Student
dim p1 as long
CopyMemory p1,byval varptr(abc),4
FindStudent p1
試試
uj5u.com熱心網友回復:
打個比方吧,先新建ActiveX DLL,在類模塊里
Type Student
Name As String
ID As String
Sex As Boolean
End Type
在標準模塊里
Public Function FindStudent(ByRef AStudent As Student)
AStudent.Name = "Mike"
AStudent.ID = "10000"
AStudent.Sex = 1
End Function
自己定義的型別和呼叫型別的公用函式不能放在同一個工程里
解決方案有兩個:
一、分拆成兩個工程
工程A定義型別 工程B參考工程A后,可以用所有A中的自定義型別
二、修改函式定義,將Public前綴去掉(實際變為private)或將"ByRef AStudent As Student"這樣的直接定義型別修改為"ByRef AStudent As Variant"不影響功能使用
uj5u.com熱心網友回復:
如果僅僅是制作 DLL,VC++ 所需要學習的內容并不多,兩個小時內可以掌握。uj5u.com熱心網友回復:
使用混合編程,VB6, VS 通吃,用VS設計好DLL,軟后用訊息機制互相通訊傳替引數uj5u.com熱心網友回復:
你們覺得我這個VB寫的標準DLL不能被其它語言呼叫?試試先,再說話http://download.csdn.net/detail/taoguangye/3913144
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/103749.html
標籤:API
上一篇:VB 輸入CMD命令
