Issues of stdRefArray
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 38/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- visualbasic
- 領域
- tooling
調査の方向性
Start by locating the stdRefArray implementation and reproducing the TeststdRefArray2 and TeststdRefArray3 examples from the issue. Compare the current array access behavior with the requested VarPtrArr and default-property behavior, then verify that both examples produce the stated reads and writes without changing the intended reference semantics.
索引モデルが issue の本文から書いたものです。
説明
- VarPtrArr shall be reurn the pointer of the safearray address.
#If Win64 Then
Private Function VarPtrArr(ByRef arr As Variant) As LongLong
#Else
Private Function VarPtrArr(ByRef arr As Variant) As Long
#End If
Dim vt As VbVarType
Dim p As Long
p = VarPtr(arr)
CopyMemory vt, ByVal p, 2
If (vt And vbArray) = vbArray Then '//安全数组
VarPtrArr = PtrAdd(p, 8) 'VARIANT结构中wReserved2的地址
If (vt And &H4000) = &H4000 Then '//引用类型VT_BYREF,如果是引用类型则wReserved2的值才是数组地址的地址
CopyMemory VarPtrArr, ByVal VarPtrArr, PTR_SIZE
End If
End If
End Function
Private Function PtrAdd(ByVal Ptr As LongPtr, ByVal iOffset As Long) As LongPtr
' For adding (or subtracting) a small number from a pointer.
' Use PtrAddEx for adding (or subtracting) large numbers from a pointer.
PtrAdd = (Ptr Xor &H80000000) + iOffset Xor &H80000000
End Function
- It is better to provide a default property to use it like a real array. But there is some CopyMemory cost that it shall not be used in a loop
Property Get GetData()
Attribute GetData.VB_UserMemId = 0
Call CopyMemory(GetData, data, 16)
End Property
Sub TeststdRefArray2()
Dim arr As Variant: arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Dim rarr As stdRefArray: Set rarr = stdRefArray.Create(arr)
Debug.Print rarr(1) '=> 2
rarr(1) = 3
Debug.Print rarr(1) '=> 3
Debug.Print rarr(2) '=> 3
End Sub
Sub TeststdRefArray3()
Dim arr As Variant: arr = [M1:M3]
Dim rarr As stdRefArray: Set rarr = stdRefArray.Create(arr)
Debug.Print rarr(1, 1) '=> 2
rarr(1, 1) = 3
Debug.Print rarr(1, 1) '=> 3
Debug.Print rarr(2, 1) '=> 3
End Sub
- 主要言語
- VBA
- スター
- 412
- フォーク
- 70
- 平均マージ
- 1日 3時間
- マージ済み PR(30日)
- 4
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
sancarn/stdVBA のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
-
enhancement lib-stdArray
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
-
enhancement megathread
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
似ている issue
-
[Request]:オープンpackage-request
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
ScoopInstaller/Extras#19195 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
area:docs Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
containers/podman-compose#1607 ·
メンテナーはふだん 4 日以内に返信