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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.75354 の関連記事表示

<< 0 >>
■75354  Re[6]: VB.netからVC++6.0のへの構造体配列参照渡し
□投稿者/ とら -(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の代入する際の注意点等あればお教え頂ければと思います。
    
    
    以上、宜しくお願い致します。
    
記事No.75306 のレス /過去ログ127より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -