構造体の引数の戻り値

[戻る]
ゴン太 [E-Mail] 2001/11/12(月) 10:40:08
構造体のメンバ変数に値をセットする方法を教えて下さい。
以下のメインファイルと、DLLファイルの2種類のコードファイルを作成し、
DLLファイル側のTestProg()内で、構造体に値をセットし、main()に返そうと
考えているのですが、コンパイルエラーになってしまいます。
エラー場所:tesInf.hensu1 = 5;
エラー内容:左側が、構造体、共用体ではありません。
C言語のポインタの基本的な質問で申し訳けありませんが、宜しくお願いします。


/*------------------- メインファイル側 ------------------------*/
// 変数構造体宣言
typedef struct tagHENSUU{
    DWORD hensu1;
    DWORD Hensu2;
}TESTHENSU;


//呼び出しメインプログラム
void main()
{

    TESTHENSU tesInf
  ret = TestProg(&tesInf);

}


/*------------------- DLLファイル側 ------------------------*/
// 変数構造体宣言
typedef struct tagHENSUU{
    DWORD hensu1;
    DWORD Hensu2;
}TESTHENSU;


int TestProg(TESTHENSU *tesInf)
{
    *tesInf.hensu1 = 5;
    *tesInf.hensu2 = 8;

    return true;
}

Bun 2001/11/12(月) 10:47:40
int TestProg(TESTHENSU *tesInf)
{
    tesInf->hensu1 = 5;
    tesInf->hensu2 = 8;

    return true;
}

ゴン太 [E-Mail] 2001/11/12(月) 11:11:00
[[解決]]
Bunさん、ありがとうございました。
ポインタの(*)(&)(.)(->)の意味が頭の中で混乱しています。
(勉強が足りません・・・。)
おかげ様で、解決しました。

 

ゴン太 [E-Mail] 2001/11/12(月) 11:40:41
すいません、まだ未解決でした。
メイン側で以下のコンパイルエラーが発生してしまいます。
エラー箇所:ret = TestProg(&tesInf);
エラー内容:struct tagHENSU * から struct tagHENSU に変換できません。
      コンストラクタはソース型を持てません、または、コンストラクタのオーバーロードレゾリューションがあいまいです。

度々、申し訳ありませんが、宜しくお願いします。
 

Bun 2001/11/12(月) 12:32:56
TestProg関数のプロトタイプ宣言はどう記述していますか?

なんでコンストラクタが出てくるのかよーわかりまへんが(^^;

ゴン太 [E-Mail] 2001/11/12(月) 13:10:05
Bunさん、色々とありがとうござうます。
調べたら、おっしゃる通り、TestProg関数のプロトタイプ宣言(DLL)が
うまくいっていないようです。
以下の宣言をしているのですが、ポインタの場合の宣言方法がわかりません。

bool PASCAL testProg( TESTHENSU );

(*),(&)等をTESTHENSUに色々つけてみたのですが、全てコンパイルエラーに
なってしまいます。 度々、宜しくお願い致します。

Bun 2001/11/12(月) 13:31:35
bool PASCAL testProg(TESTHENSU *);

ではダメですか?

ゴン太 [E-Mail] 2001/11/13(火) 10:55:56
[[解決]]
Bunさん、ありがとうございます。
その後、色々確認した結果、宣言の記述方法に問題がありました。
基本的に、bool PASCAL testProg(TESTHENSU *); でOKでした。
助かりました。

古いスレッドには追加発言できません。