- ベストアンサー
バイナリ→構造体
- 仕様の都合でLong型のポインタにしたいと思ってます。
- VarPtrを使ってLong型のポインタに変換し、別の構造体に格納して共有メモリに移す方法を教えてください。
- 別ウインドウから共有メモリからデータを取り出し、Long型のポインタから構造体に戻す方法を教えてください。
- みんなの回答 (15)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (14)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
- 2ch
- ベストアンサー率51% (64/125)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
- 1
- 2
関連するQ&A
- 構造体→文字列→構造体 をする方法
VB6.0の話です。 不特定の構造体を文字列(String)に格納し、これを最初の構造体に戻す事はできませんか? 具体的には「共有メモリを使い構造体を文字列にして格納>別ウインドウで文字列を取得して構造体に戻す」と言う事をやりたいんです。 共有メモリに不特定の構造体をいれる方法でもいいんですが…VALIANTだとサイズが大きすぎて実用性がありませんし、違う主旨の質問をするのも良くないので回答はあくまで「構造体→文字列→構造体 をする方法」と言う事でお願いします。
- ベストアンサー
- Visual Basic
- HOSTENT構造体を宣言する必要はないのですか?
ネットワークプログラミングを勉強しているのですが,ソケットを用いた通信のサンプルで, HOSTENT *lphost として,HOSTENT構造体へのポインタを宣言して, lphost = gethostbyname(ホスト名の文字列); で,サーバーのアドレスをHOSTENT構造体にセットするとあります。 構造体へのポインタを宣言しても,構造体自体の領域は確保されないのではないかと思うのですが,gethostbyname関数が返すポインタは,いったい誰がどこに確保した領域を指しているのか,そしてその領域はいつまで保持されるのか,よく理解できません。構造体そのものを宣言せずに,それへのポインタを宣言し,それに関数の戻り値を代入するというのが,よく理解できないです。どなたか解説していただけると幸いです。
- ベストアンサー
- C・C++・C#
- VB2008: 構造体に関連して・・・。
VB.Net を知って60日という初学者です。 プログラマではなくデザイナ。 ですから、未だに Sub Main() で基本事項の確認中です。 フォームなどの演習は、まーだ、当分はしない予定です。 さて、質問は構造体に関するMSDN の記述です。 >構造体の要素が文字列型 (String) やオブジェクト型 (Object) などの参照型である場合は、 >データへのポインタがコピーされます。 この下り。 「なんでポインタがコピーされるんや」という疑問を抱きました。 ・文字列型にプロパティやメソッドという機能を付加するためにクラス型にした。 ・クラス型は、「・・・・」ということで参照型。と ・「・・・・」と同じ理由。 というように背景を推測しました。 この推測も単なるど素人の推測。 当を得たいるか?実に怪しい物。 仮に当らずとも遠からずとしても、肝心の「・・・・」がわかりません。 この辺りに関して、「このように考えてたらよい」という回答がありましたらお願いします。
- ベストアンサー
- Visual Basic
- VB6でポインタ?
VB6でポインタを扱う関数 VarPtrがあるのですが、使えるデータ型は何があるのでしょうか? 仕様なのか、動的配列のポインタが取得できません。 dim kosuu() as integer redim kosuu(50) dim pointer as long pointer = VarPtr( kosuu() ) 'エラー VB6でポインタを扱う場面は例えばどんな場合があるか知りたいです。 ポインタは使わない(使ってはいけない)のが基本でしょうか。
- ベストアンサー
- Visual Basic
- VB .Netの構造体について
構造体について教えて下さい。 クラスで構造体を作成しました。 クラスでIniファイルを読み込み、Formのボタンを押した処理の中で構造体を読み込みたいのですが、何をしても空白(Nothing)になります。 クラスの中では格納されたままなのに・・・。 違う場所で構造体を呼んだときは別の処理がいるのでしょうか? それともVB .Netの仕様なのでしょうか?
- ベストアンサー
- Visual Basic
- 構造体について
構造体について分からない点があり,教えて頂きたく投稿いたします. 現在,以下のような構造体を作成しています. typedef struct{ int data; struct node *NEXT; }node; また,それを管理するためのリストを以下の構造体にて宣言しました. typedef struct{ node *crnt; node *last; }node_list; また,使用する関数内での宣言は以下の通りです. node_list *non_dscvr_node_list; //未探査ノードを格納する node *crt_dscvr_node; //現在探査中のノードを示す node *start; そして, start->data = 10; start->NEXT = NULL; non_dscvr_node_list->crnt = start; non_dscvr_node_list->last = start; : : crt_dscvr_node = non_dscvr_node_list->crnt; non_dscvr_node_list->crnt = crt_dscvr_node->NEXT; //ここでエラーがでる. エラーの詳細は以下の通りです. warning: assignment from incompatible pointer type 私としては,リストに格納されている先頭ノードをポップして,次のノードを先頭にしたつもりだったのですが,ポインタタイプに互換性がないと怒られてしまいました. 少し調べては見ましたが,nodeの構造体を管理するために別に構造体を定義しているページがあまり見あたりません. 従って,そのようなページがあれば教えて頂きたいと思います. このような方法はあまりよくないのでしょうか. 併せて教えていただけますようお願いいたします.
- ベストアンサー
- C・C++・C#
- C#の構造体に関して
C#の構造体に関して C#で構造体で配列を持ちたいと思い、宣言の仕方や使い方を 勉強していますが、どうしてもコンパイルは通るもののエラーと なってしまいます。 《ソース》 単純に構造体で宣言した"a"という配列に、"ABC"という文字列を 代入したいだけですが。。。 namespace テスト環境 { struct test { public string []a; } class Program { static void Main(string[] args) { test aaa = new test(); aaa.a[0] = "ABC"; } } } 配列の初期化等は、ようやく理解したつもりではいますが、構造体 が絡むとどうしてもわかりません。 どこをどのように修正したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 構造体の初期化の時にポインタを入れるにはどうしたらいいですか?
構造体の初期化の時にポインタを入れるにはどうしたらいいですか? 例えば、このような構造体で↓ struct PACKET { uint16_t size; // データの長さ uint16_t *data; // データバイト列 }; 初期化の時にsizeとdataを入れるにはどうしたらいいのでしょうか? dataがuint16_t*じゃなくてchar*なら struct PACKET { uint16_t size; // データの長さ char *data; // データバイト列 }; struct PACKET p = { 5, "12345" }; というようにできるのですが・・・
- ベストアンサー
- C・C++・C#
- 構造体 アドレス
VC++6 こんにちは。構造体のアドレスを文字列ポインタで操作することに悩んでいます。下にソースの一部を書きます。 typedef struct{ char code[100]; int type; }AAA; typedef struct{ double method[4][3]; int area; }BBB; 複数の構造体があり、 BOOL CTestApp::File_Check(){ AAA aaa; ~ db.DB_regi(2, (char *)&aaa); ~ } void CData::DB_regi(int key, char *buff) { switch(key){ ~ case 2: sss.push_back(buff); //vector<char *> sss; break; } で、データを登録し、 int CTestApp::Data_Check() { ~ AAA aaa; db.DB_get(2, (char *)&aaa); ~ } void CData::DB_get(int key, char *buff) { switch(key){ ~ case 2: buff = sss[i]; break; ~ } で、構造体のアドレスを取得しようと思ったら、取得できませんでした。 //DB_getの中では、aaa = (AAA *)buff;とすれば指定の構造体を取得できる。 DB_get関数をどのようにしたら、Data_Check()で、登録した構造体を取得できるのか教えてください。長くなってすみません。
- ベストアンサー
- C・C++・C#
- Windows10で設定画面からネットワークとインターネットを選択してもwifiが表示されません。
- アダプターのオプションを変更すると、有効になっているwifiのアイコンが表示されます。
- 過去にはwifiを利用できたが、現在は表示されない状況です。再表示方法を教えてください。
お礼
つまり…BufNameをバッファ名として渡された場合、BufName_1、BufName_2、みたいな感じでOCX内で定義してバッファを並べればいい訳ですね?で、それを管理する構造体を作り、読み込む構造体の名前を格納しておく…ってなんだか分かったような分かって無いような言い方してますが、出来てるので分かったんだと思います。まあ、アドレスにこだわったのがそもそもの間違いだと… お二人には大変ご迷惑をおかけいたしました。おかげさまで足りない頭でも何とか完成には至れました…分かってみれば単純な理屈でしたけど。何故これが思いつかなかったのかと… 初めからこの実装を出していれば話もこじれずに済んだのかもしれませんが…色々と勉強させていただいただきました。Lenやポインタの事もどこかでそのうち参考にさせていただきます。 本当にありがとうございました。