DOBON.NET DOBON.NETプログラミング掲示板過去ログ

API構造体のメンバについて

分類:[その他]

初心者な質問かもですが、よろしくお願いします。
winsock を使おうとしています。
サンプル自体はたくさん転がっているのですが、それらを見ていてナゾな事があり、投稿させて頂きました。
構造体にHOSTENTというものがあり、C言語のサンプルでは

struct hostent {
  char FAR * h_name;
  char FAR * FAR * h_aliases;
  short h_addrtype;
  short h_length;
  char FAR * FAR * h_addr_list;
};

となっているのに対し、VBサイトの方では

Structure hostent
  h_name As Integer 正式なホスト名
  h_aliases As Integer ホストの別名リスト
  h_addrStructure As Short ホストのアドレスタイプ
  h_length As Short アドレス長
  h_addr_list As Integer ホストのIPアドレス
End Structure

となってました。

疑問1 ホスト名の型が char FAR * と Integer と、定義が違うのはナゼ?
疑問2 char FAR * の FAR * って配列の事ですか?調べたら過去の遺物だから無視って載ってたりしました。
     (配列ならホスト名が1文字ずつ h_name に格納されると納得できるのですが…)

よろしくお願いします。
VB.NET ですか。
ソケットを使いたいなら System.Net.Sockets 名前空間のクラスを使うべきです。
低級なのは忘れましょう。


> 疑問1 ホスト名の型が char FAR * と Integer と、定義が違うのはナゼ?

C 言語と VB.NET だからです。
言語が違えば表現が違うのは当然ですね。
もっともそこは Integer ではなく IntPtr を使うのが正解ですが。

> 疑問2 char FAR * の FAR * って配列の事ですか?調べたら過去の遺物だから無視って載ってたりしました。

FAR は Win32 では意味がありません。ので、* だけが意味を持ちます。
* の意味するところは「ポインタ」で、二つ並ぶと「ポインタのポインタ」ですが、説明し出すときりがないので C 言語を学んで下さい。
Hongliangさん、ありがとうございます。

> VB.NET ですか。
すみません、VBでもCでもないので、「その他」カテゴリに投稿させていただきました。
開発環境は、PowerBuilder という主にデータベースアプリ開発用の開発ソフトでして…
.NetFrameWork ベースではなく、単体実行可能な exe や dll を生成できるものです。
どこで聞いてよいものかと思っていたのですが、私はVB.NET出身?なもので、こちらのサイトをよく利用させて頂いていたのを思い出し、投稿させて頂きました。

> C 言語と VB.NET だからです。
> 言語が違えば表現が違うのは当然ですね。

確かにそうですね〜。
でも私たちには関与しないですが、 C や VB が内部的にAPIを呼ぶ時は同じ引数で呼んでるんですよね?

> FAR は Win32 では意味がありません。ので、* だけが意味を持ちます。
> * の意味するところは「ポインタ」で、二つ並ぶと「ポインタのポインタ」ですが、説明し出すときりがないので C 言語を学んで下さい。

* の意味するところが分かっただけでもあり難いです、PowerBuilder での定義の参考になります。

またいろいろやってみます。ありがとうございました。
m(_ _)m
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板