none
LPCWSTRにキャストをかけたい RRS feed

  • 質問

  •  現在、メッセージボックスにULONG型の値を表示したいと思っていますが、なかなか実現ができません。

     まず、キャストについて調べたところ()で型をくくって、その後に変数を書けば良い、とありました。
    下記のようにしてみました。

     LPCWSTR Test;
      Test = (LPCWSTR)psrs[0].cRows;
      MessageBox(NULL, Test, L"Error", MB_OK);

     ビルドしてデバッグモードで追いかけてみますが、キャスト後のTestの値は目的の値が入っていません。
    ちなみに「psrs[0].cRows」ですが、宣言時にこんな感じで書かれています。

         SRowSet         *   psrs        =   NULL;

     この「SRowSet」というのは、構造体?になっているのかな、と思うのですが、
    定義移動で確認すると下記のようになっていました。

    typedef struct _SRowSet
    {
        ULONG           cRows;          /* Count of rows */
        SRow            aRow[MAPI_DIM]; /* Array of rows */
    } SRowSet, FAR * LPSRowSet;

    C++は、昨夜から始めたばかりで他者が作ったソースを見ながらやっており、上手く説明できない点もありますが、
    ご助言をよろしくお願いします。

    2009年10月2日 2:16

回答

  • BluePixyさんと質問開発者さんは同一人物なんでしょうか?
    同一人物であるなら投稿者名をコロコロ変えるようなことはやめた方が良いと思います。
    私も、少なくとも同一スレッドにおいては同じ名前(プロファイル、Live ID)を利用して頂きたいと思っています。
    全く別の質問をされる際にプロファイルを切り替えることについては、特に支障はないと思います。

    # 類似の質問であれば同じプロファイルにした方が分かりやすいと思います。類似だと逆にプロファイルを切り替えても紐付けできることがありますし。

    業務的なこともあって、入門書を開いている余裕さえない状態ですが、
    やるしかないので少しずつ調べながら対処していきます。
    こういう話をよく聞きますが、基礎を押さえずに現場に投入されてそのまま進めても、もっと酷い目に遭うだけです。(不具合が多発する等)
    可能であれば学習する時間の確保を上司に交渉してください。

    上司が学習期間を認めないようなデスマーチな職場だとした場合はどうしようもありませんが…。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク BluePixy 2009年10月5日 2:11
    • 回答としてマークされていない BluePixy 2009年10月5日 2:11
    • 回答としてマーク BluePixy 2009年10月5日 2:13
    2009年10月3日 9:46
    モデレータ
  • どーも、PATIOです。

    まずは御忠告を。
    C++言語の入門書を用意して一度初めから通して勉強されることをお勧めします。
    たぶん、文法やら基本的な決まりごとやらを全く御存じない状態だと思います。
    掲示板でこれらを一から教えるのは容量的にも時間的にも難しいと思います。

    で、cRowsはULONG型の変数ですが、中に入っているのは数値ではないでしょうか?
    数値をキャストしても文字列にはなりませんから表示は出来ません。
    数値を数字の文字列に変換する必要があります。
    変換する方法は色々ありますが、キャストと数値から文字列に変換すると言う行為の違いが
    理解できていないと他の場面でも同じような事をしてしまうと思います。
    この辺の基本的な知識については既に書いている通り、入門書等で体系的に学習する方が
    効率が良いと思いますのでまずは入門書で勉強されることをお勧めします。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 回答としてマーク BluePixy 2009年10月5日 2:10
    • 回答としてマークされていない BluePixy 2009年10月5日 2:11
    • 回答としてマーク BluePixy 2009年10月5日 2:13
    2009年10月2日 3:07

すべての返信

  • 答えを書くのは簡単ですが、BluePixyさんの場合、C++言語に対して(というよりもその根底にあるC言語に対して)のHello worldレベルの理解がまずできていません。

    文字列のためのメモリ確保はどうしますか? ULONG型を表示するためにどのような表記にしますか?(16進とか10進とか)
    辺りも考えて、それをソースコードとして記述する必要があります。
    2009年10月2日 3:05
  • どーも、PATIOです。

    まずは御忠告を。
    C++言語の入門書を用意して一度初めから通して勉強されることをお勧めします。
    たぶん、文法やら基本的な決まりごとやらを全く御存じない状態だと思います。
    掲示板でこれらを一から教えるのは容量的にも時間的にも難しいと思います。

    で、cRowsはULONG型の変数ですが、中に入っているのは数値ではないでしょうか?
    数値をキャストしても文字列にはなりませんから表示は出来ません。
    数値を数字の文字列に変換する必要があります。
    変換する方法は色々ありますが、キャストと数値から文字列に変換すると言う行為の違いが
    理解できていないと他の場面でも同じような事をしてしまうと思います。
    この辺の基本的な知識については既に書いている通り、入門書等で体系的に学習する方が
    効率が良いと思いますのでまずは入門書で勉強されることをお勧めします。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 回答としてマーク BluePixy 2009年10月5日 2:10
    • 回答としてマークされていない BluePixy 2009年10月5日 2:11
    • 回答としてマーク BluePixy 2009年10月5日 2:13
    2009年10月2日 3:07
  • キャストについて理解されていないということなのだと思いますが、
    キャストを理解するには少なくても、型・変数・配列・ポインタというものを正しく理解していなければなりません。
    それをここで説明してくれる人がいるかどうか…。

    たとえば、
    using namespace std;
    wostringstream ost;
    ost << psrs[0].cRows;
    MessageBox(NULL, ost.str().c_str(), L"Error", MB_OK);
    

    ならば、思った通りの動作をすると思います。
    2009年10月2日 3:18
  • そうですね、勉強して出直します。
    ありがとうございました。
    2009年10月2日 4:25
  • 業務的なこともあって、入門書を開いている余裕さえない状態ですが、
    やるしかないので少しずつ調べながら対処していきます。
    ありがとうございました。
    2009年10月2日 4:26
  • ポインタ辺りが理解できていないのですが、勉強しながら挑戦します。
    ありがとうございました。
    2009年10月2日 4:29
  • BluePixyさんと質問開発者さんは同一人物なんでしょうか?
    同一人物であるなら投稿者名をコロコロ変えるようなことはやめた方が良いと思います。
    周りの人間が混乱しますので。

    あと、とりあえず解決したと言うことならスレッドを締めた方が良いと思います。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2009年10月2日 9:00
  • BluePixyさんと質問開発者さんは同一人物なんでしょうか?
    同一人物であるなら投稿者名をコロコロ変えるようなことはやめた方が良いと思います。
    私も、少なくとも同一スレッドにおいては同じ名前(プロファイル、Live ID)を利用して頂きたいと思っています。
    全く別の質問をされる際にプロファイルを切り替えることについては、特に支障はないと思います。

    # 類似の質問であれば同じプロファイルにした方が分かりやすいと思います。類似だと逆にプロファイルを切り替えても紐付けできることがありますし。

    業務的なこともあって、入門書を開いている余裕さえない状態ですが、
    やるしかないので少しずつ調べながら対処していきます。
    こういう話をよく聞きますが、基礎を押さえずに現場に投入されてそのまま進めても、もっと酷い目に遭うだけです。(不具合が多発する等)
    可能であれば学習する時間の確保を上司に交渉してください。

    上司が学習期間を認めないようなデスマーチな職場だとした場合はどうしようもありませんが…。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク BluePixy 2009年10月5日 2:11
    • 回答としてマークされていない BluePixy 2009年10月5日 2:11
    • 回答としてマーク BluePixy 2009年10月5日 2:13
    2009年10月3日 9:46
    モデレータ
  •  まだ慣れていないため、いろいろご迷惑をおかけしました。
    回答マークをつけさせて頂きました。

     片方のIDは会社用なのですが、自分用と勘違いして投稿してしまいました。
    混乱を招いてしまい申し訳ありません。
    以後、気をつけます。

    2009年10月5日 2:16
  •  ご迷惑をおかけしました。
    今後は、このようなことがないように気をつけます。

     学習期間は望めない環境のため、自分で時間を作って解決しようと思います。
    ありがとうございました。
    2009年10月5日 2:18