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

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

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

No.75314 の関連記事表示

<< 0 >>
■75314  Re[4]: VB.netからVC++6.0のへの構造体配列参照渡し
□投稿者/ とら -(2015/03/13(Fri) 11:28:42)
    No75312 (魔界の仮面弁士 さん) に返信

    お手数をお掛けして申し訳御座いません。
    再度徹底して見直してまとめなおしました。


    >VB EXE 側ではなく、VC++ DLL 側のデバッガで要素数を確認されたのでしょうか。
    VB2008側及びVC++側のデバッグ双方にて確認致しました。
    VCで受け取った際に既に要素数が1個になっていたようなのでVB2008側での問題だと思いました。



    VC++6.0側は内容が理解できなかったのでメソッドの宣言部のみです

    VC++6.0側のType1に関しては、「受信データを格納する構造体へのポインタ
    または受信データを格納した共有メモリの管理構造体へのポインタ」
    と記載がありました


    ## VC++6.0 ###########

    Test1_API int __stdcall Test1(LPSAFEARRAY *Type1)


    ## VB6.0 #############

    -- 宣言部 ----

    Declare Function Test1 Lib "TestFunc.DLL" (oType() As Any) As Long

    Public Type Type1
    Long1 As Long
    Long2 As Long
    Long3 As Long
    End Type

    Public oType(0 To 9) As Type1


    -- 処理 ----

    Dim iRet As Long
    iRet = Test1(oType())



    ## VB2008 アップグレード後にエラー及び警告を排除した状態で渡されたソース #############

    -- 宣言部 ----

    Declare Function Test1 Lib "TestFunc.DLL" (ByRef oStructure() As Structure1) As Integer

    Public Structure Structure1
    Dim int1 As Integer
    Dim int2 As Integer
    Dim int3 As Integer
    End Structure

    Public oStructure1(9) As Structure1


    -- 処理 ----

    Dim iRet As integer = -1
    iRet = Test1(oStructure1)

    '結果としては配列の要素数が1個になっており、値も変更されていない



    ## VB2008 ご指摘部分反映後 #############


    '参照渡しを値渡しに変更しマーシャリングを追加

    Imports System.Runtime.InteropServices

    Declare Function Test1 Lib "TestFunc.DLL" (<InAttribute(), OutAttribute()> ByVal oStructure() As Structure1) As Integer

    '結果としては配列の要素数は10個になったものの値は変更されていない



    以上、引き続きお願い致します。
記事No.75306 のレス /過去ログ127より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -