有一个不是办法的办法,给你点思路,既然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的线长方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)