[英]Found and Set Value to a UDT member VB6
我正在尋找一些幫助來解決UDT成員的動態設置值的問題。 我正在嘗試做類似前面的偽代碼:
Public sub UDTMemberSetValue(ByRef pvUDTValue As Variant, _
ByVal psMemberName As String, _
pvMemberValue As Variant)
Dim mMember as Member
For each mMember in pvUDTValue.Members
if mMember.Name = psMemberName then
if isObject(pvMemberValue) then
Set mMember.Value = pvMemberValue
else
mMember.Value = pvMemberValue
End if
End If
Next
End Sub
我被搜查過幾個網站,不幸的是沒有一個網站,我已經接近了我的必要性。 所以我想知道是否有人可以幫我這個?
你不能在直接的VB6中做到這一點。 但是,您可以使用tlbinf32.dll
ActiveX組件,該組件至少從Windows XP安裝為Windows的一部分。 這可用於從類型庫中提取有關類,接口和記錄(即UDT)的信息。 缺點是如果你想在VB UDT中使用它,只有你的UDT在公開暴露的VB類或UserControl中被聲明為Public才能使用它。
組件應該注冊; 但如果不是,請使用regsvr32.exe tlbinf32.dll
。 它應作為TypeLib Information
出現在引用列表中,並具有庫名TLI
。
我修改了你的偽代碼以包含庫。 原始版本就像你的代碼一樣,我想知道你是否已經知道這一點。
但是有一種更簡單的方法可以迭代成員信息,並設置正確的value屬性:使用RecordField
屬性。 不幸的是,至少在我的機器上,我無法將pvUDTValue直接傳遞給這個屬性。 但經過反復試驗,我發現它可以使用變體的副本。 您只需記住在更新字段后用副本替換原始變體。
Public Sub UDTMemberSetValue(ByRef pvUDTValue As Variant, _
ByVal psMemberName As String, _
ByRef pvMemberValue As Variant)
Dim oApp As TLI.TLIApplication
Dim vTemp As Variant
Set oApp = New TLI.TLIApplication
vTemp = CVar(pvUDTValue)
oApp.RecordField(vTemp, psMemberName) = pvMemberValue
pvUDTValue = vTemp
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.