簡體   English   中英

找到並設置UDT成員VB6的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM