C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 127 を表示中)
■75354 / )  Re[6]: VB.netからVC++6.0のへの構造体配列参照渡し
□投稿者/ とら (9回)-(2015/03/18(Wed) 14:04:58)
今回の問題点を解決するにあたっての方針を以下のようにするつもりです。
(ただし、当方VC++というかC++系はほとんど触れた事がありません、ポインタ等も概念程度を僅かに知っている程度です)

@ VC++6.0をVC++2008へとアップグレードする。

A VC++にて構造体配列の先頭データ1つと配列の要素数を受け取るように変更する。

B VBで使用している構造体と同じように構造体を宣言し、VBから呼び出されたメソッドにて構造体配列を作成する。

C VBから呼び出されたメソッドでは、引数で受け取った構造体配列を他のメソッドにそのまま渡していたので、
  引数で受け取った構造体配列を他メソッドに渡すのではなく、Bにて作成した構造体配列を渡すようにする。

D VCで作成した構造体配列をVBから受け取った構造体配列に代入する事により値を返却する。


改修イメージは以下のようになります。

 改修前
    TEST_API int __stdcall FuncTest(LPSAFEARRAY *Type1)
      {
        int nRet=0;
        nRet = FuncTestSub(Type1);
        return nRet;
      }

 改修後
    //A
    TEST_API int __stdcall FuncTest(LPSAFEARRAY *Type1, int AryUBound)
      {
        //B
        typedef struct {
          int lMemoryHandle;
          int lMemoryAddress;
          int lSemaphoreHandel;
        } T_Struct;

        //B
        T_Struct aryT_Struct[AryUBound];

        //C
        int nRet=0;
        nRet = FuncTestSub(aryT_Struct);

        //D
        Type1 = aryT_Struct

        return nRet;
      }


現状では、とりあえずVCのデバッグ実行にて値が格納されるか確認しようとしたところ、下記のようなエラーが発生しました。

「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」

構造体配列の宣言または渡し方が悪いのか分かりません。


また、Dの代入する際の注意点等あればお教え頂ければと思います。


以上、宜しくお願い致します。

返信 編集キー/


管理者用

- Child Tree -