- ベストアンサー
プロパティの引数でエラー発生
- 実行するとVBが落ちてしまうソースコードがあります。原因を特定するために質問させていただきました。
- Windows XP + SP2の環境でVisual Basic 6.0 + SP5を使用しています。
- 特定のロジックで使用するバイト配列の引数をプロパティで設定するとエラーが発生します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>バイト配列 言わばメモリ参照 ByRef bytArray() As Byte をさらに ByRef bytArray() As Byte で渡しているので、メモリ参照のメモリ参照をやっているような気が・・・ ってかVBのバグっぽい気がします。 ByRef bytArray() As Byte はできるけど ByVal bytArray() As Byte はできない だから値を他の器にセットして渡したらいいと思う。 Private Property Let Array1(ByRef bytArray() As Byte) Dim bytWk() As Byte 'Array2 = bytArray '←原文 bytWk = bytArray '←実質的メモリコピー Array2 = bytWk '←Array1のパラメータの(擬似)値渡し End Property もしくは全てVariant Private Property Let Array1(ByRef bytArray As Variant) End Property Private Property Let Array2(ByRef bytArray As Variant) End Property
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
#1です >これが妥当なところですかね。 勝手な想像の域なので、確証はないです。 しかしAPIマニアのバイブル「バイト配列」ということもあり、癖がありそうですよね^^; >私が投稿した時点でそれも記入しておけばよかったです。 いえいえ、むしろ書かずして同じ所にたどり着いたのですから、ある程度方法が限られるのかな(?)と勝手に想像しております。 万が一「メモリ参照のメモリ参照」が違っていても、メモリリークを起こして落ちていることは間違いないと思います。 tonytonychopperさんのサンプルをやってみたら、「二度と見たくないメッセージボックス」が出現しましたしね^^;
お礼
>万が一「メモリ参照のメモリ参照」が違っていても >メモリリークを起こして落ちていることは間違いな >いと思います。 >tonytonychopperさんのサンプルをやってみたら、 >「二度と見たくないメッセージボックス」が出現しま >したしね^^; 「二度と見たくないメッセージボックス」ですからメモリリークは間違いないですね。 あのメッセージボックスを私もそう呼びたいと思います。かなり気に入ってしまいました(笑) ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
全体が見えないのでわからないけど Array2が定義されていないことはないよね。 Command1_Clickの中で確保されているbytArrayの参照をArray2に設定しているのに、 Command1_Clickが終了した後(外で)Array2を参照しようとした? とか
お礼
やはりメモリ参照のメモリ参照だから・・・VBのバグってのも考えられますね。 これが妥当なところですかね。 たしかに変数に値をコピーしておいてそれを渡すと問題なく動作できました。実はこれに関しては確認済みでした。私が投稿した時点でそれも記入しておけばよかったです。お手数をかけてしまい申し訳ございません。