DOBON.NETプログラミング掲示板過去ログ
ocxへのInteger配列データの取得
題名: ocxへのInteger配列データの取得
著者: つと
日時: 2007/09/04 23:29:12
ID: 20407
この記事の返信元:
(なし)
この記事への返信:
(なし)
ツリーを表示
環境/言語:[WinXP/VB2005, VC++6.0]
分類:[.NET]
2007/09/04(Tue) 23:30:19 編集(投稿者)
質問をさせて頂きます。
「VB2005」を使用して「VC++6.0」で作成されたocxの関数とやり取りをしています。
引数にInteger型の配列を渡して結果を取得する仕様ですが、Integer配列の先頭を渡すと配列の1番目のみしかデータが格納されません。
Dim buf(9) As Integer
Test(buf(0)) ←先頭しか格納されない
そのため、マーシャルクラスを使用して固定メモリを渡しましたが、結果を配列にcopyする時に「保護されているメモリへのアクセス…エラー(System.AccessViolationException)」となってしまいます。
VC++6.0
void Test(long* data) //10個の計測結果が引数に格納されます
VB2005
Dim buf(9) As Integer
Dim ptr As IntPtr = Marshal.AllocHGlobal(buf.Length*4)
Test(ptr)
Marshal.Copy(ptr, buf, 0, buf.Length) ←ここでエラー
Mashal.Copyの場合は第4引数が0以外をアクセスするとエラーになります。
何が問題なのがご教授願いますでしょうか?
よろしくお願いします
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
2007/09/04(Tue) 23:30:19 編集(投稿者)
質問をさせて頂きます。
「VB2005」を使用して「VC++6.0」で作成されたocxの関数とやり取りをしています。
引数にInteger型の配列を渡して結果を取得する仕様ですが、Integer配列の先頭を渡すと配列の1番目のみしかデータが格納されません。
Dim buf(9) As Integer
Test(buf(0)) ←先頭しか格納されない
そのため、マーシャルクラスを使用して固定メモリを渡しましたが、結果を配列にcopyする時に「保護されているメモリへのアクセス…エラー(System.AccessViolationException)」となってしまいます。
VC++6.0
void Test(long* data) //10個の計測結果が引数に格納されます
VB2005
Dim buf(9) As Integer
Dim ptr As IntPtr = Marshal.AllocHGlobal(buf.Length*4)
Test(ptr)
Marshal.Copy(ptr, buf, 0, buf.Length) ←ここでエラー
Mashal.Copyの場合は第4引数が0以外をアクセスするとエラーになります。
何が問題なのがご教授願いますでしょうか?
よろしくお願いします