tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: VB6.0のExeとVC++6.0のDLLの文字列
投稿日: 2008/05/21(Wed) 10:24
投稿者VB
状況は少し変わりまして。。
----------VB----------------------------------------------------------------
☆標準モジュール
Public Type DLL
  flg1 As String
    flg2 As String
End Type
Public Declare Function test Lib "test.dll" (PINFO As DLL) As Long
☆フォーム
Dim PINFO(0) As DLL
Dim rtn As Long
    PINFO(0).flg1 = "X"
    PINFO(0).flg2 = "Y"
rtn = test(PINFO(0))
Text1.Text = rtn
--------------------------------------------------------------------------------
----------------VC++------------------------------------------------------------
typedef struct DLL{
    char    flg1;
    char    flg2;
};

_declspec(dllexport) int WINAPI test(const DLL* PINFO[1])
{
    int   fret;

    if  ((PINFO[0]->flg1 != 'X' ) && (PINFO[0]->flg1 != 'Y'))
    {
        fret = 0 - 12;
        return(fret);
    }

    if  ((PINFO[0]->flg2 != 'X') && (PINFO[0]->flg2 != 'Y'))
    {
        fret = 0 - 13;
        return(fret);
    }

    return 0;
}

上記のようなプログラムを作ったのですが。
VC++でデバックを行うと
PINFO[0]->flg1 = "X"
PINFO[0]->flg2 = ""
PINFO[1]->flg1 = "Y"
PINFO[1]->flg2 = ""
の値が入ってしまいます。
Q1.
VC++でPINFO[1]と書いているのになぜ2つ目のテーブルが出来てしまうのか。
分かりましたら宜しくお願いいたします。

Q2.
試しにVBの構造体の宣言で
Public Type DLL
  flg1 As String * 1
    flg2 As String * 1
End Type
としてみたところひとつのテーブルで値が代入されたのですが
文字化けしてしまいました。
これを防ぐ方法もありましたら宜しくお願いいたします。

魔界の仮面弁士さまいつもありがとうございます。
少しずつですが、進行しています。。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。