高分挑战所有百度知道的VB达人,用什么方法在IStream中读写VB定义包含变长String的结构体

高分挑战所有百度知道的VB达人,用什么方法在IStream中读写VB定义包含变长String的结构体,第1张

有一个不是办法的办法,给你点思路,既然VB读取结构体麻烦,你还不如手动指定变量类型,vb有ParamArray参数类型,可以定义如下函数:

Type MyType

lng As Long

str As String '(变长的字符串)

End Type

Function stmReadType(t, ParamArray vt)

For i=LBound(vt) To UBound(vt)

Select Case vt(i)

Case vbLong

Case vbString

Case vbArray + vbByte

Case Else

End Select

Next

End Function

调用:stmReadType MyType, vbLong, vbString

当然可以的,需要SystemRuntimeInteropServices 命名空间中的 Marshal 类

Imports SystemRuntimeInteropServices '这里一定要有 

Public Class Form1

    Public Structure m_Point

        Dim x As Integer

        Dim y As Integer

    End Structure

    Private Sub Button1_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button1Click

        Dim i As Integer = 50

        Dim ai() As Integer = {1, 2, 3, 4, 5}

        Dim pi As IntPtr = GCHandleAlloc(i, GCHandleTypePinned)AddrOfPinnedObject() '取得整形变量的指针 

        Dim pai As IntPtr = GCHandleAlloc(ai, GCHandleTypePinned)AddrOfPinnedObject() '取得整形数组首地址指针

        MsgBox(MarshalReadInt32(pi, 0)) '读回整形变量指针指向的值

        MsgBox(MarshalReadInt32(pai, 0  4)) '读回数组的第一个元素

        MsgBox(MarshalReadInt32(pai, 1  4)) '读回数组的第二个元素

        MsgBox(MarshalReadInt32(pai, 2  4)) '读回数组的第三个元素

        '-----下面是结构--------------------------

        Dim m_p As New m_Point

        m_px = 100

        m_py = 50

        Dim pm_p As IntPtr = GCHandleAlloc(m_p, GCHandleTypePinned)AddrOfPinnedObject() '取得结构首地址指针 

        MsgBox(MarshalReadInt32(pm_p, 0  4)) '读回结构的第一个值

        MsgBox(MarshalReadInt32(pm_p, 1  4)) '读回结构的第二个值

    End Sub

End Class

首先,你要得到当前文档的SPAWorkbench对象

代码如下:

Dim TheSPAWorkbench As Workbench

Set TheSPAWorkbench = CATIAActiveDocumentGetWorkbench ( "SPAWorkbench" )

然后,你要得到Measurable对象

代码如下:

Dim TheMeasurable As Measurable

Set TheMeasurable = TheSPAWorkbenchGetMeasurable(referenceObject)

其中 referenceObject就是你要测量的直线的reference

最后,有了Measurable以后,你就可以使用这个对象得到只想的长度了

代码如下:

Dim ALength As double

ALength = TheMeasurableLength

以上就是关于高分挑战所有百度知道的VB达人,用什么方法在IStream中读写VB定义包含变长String的结构体全部的内容,包括:高分挑战所有百度知道的VB达人,用什么方法在IStream中读写VB定义包含变长String的结构体、在VB.net中如何取变量、结构、数组、函数的地址、你好,我想问一下VB获取catia的线长方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9625406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存