none
前スレ「VC++2008Express Edition error LNK2019 error LNK1120」より不明な点について RRS feed

  • 質問

  •  

    前スレの「VC++2008Express Edition error LNK2019 error LNK1120」で不明な点があります。

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=4101726&SiteID=7

     

    1.なぜ「Win32プロジェクト」でプログラムを作成しなければならないのか。

     というよりコンソロールとプロジェクトの違いがわかりません。

     

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     Unicodeとマルチバイトの最大の違いは何でしょう?

     

    この二点です。

     

    自分で検索したのですが、よくわかりませんでした。

     

    申し訳ないのですが返信よろしくお願いします。

    2009年1月26日 13:53

回答

  • こんにちは。

     

    1 はご質問の意味がわかりませんでしたので、2番だけ...

     

     kounext さんからの引用

    なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     

    前のスレッドをみましたが、Unicode ビルドの設定になっているために、マルチバイト文字から、

    ワイドキャラクタへの変換の必要が出てきてしまい、そこでコンパイルが失敗しているからだと思います。

    そのため、「マルチバイト文字の設定にしたらうまくいくんじゃないでしょうか」 という

    アドバイスになったんだと思います。

     

     kounext さんからの引用

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     Unicodeとマルチバイトの最大の違いは何でしょう?

     

    Unicode とマルチバイトの最大の違いは、Unicode が1文字を表すのに 「ユニ」(単一)コードであり、

    後者がマルチな (複数) バイトの文字列ということです。

     

    # ふざけているのではなく、本当です。

     

    シフト JIS などのエンコーディング方式では、1文字を表すのに1バイトだったり2バイトだったりします。

    これをマルチバイト文字セット (MBCS) といいます。一方、ユニコードは1文字を表すのに、常に

    2バイトとする文字集合です。これが一番の違いでしょう。

     

    ちなみに、Windows ではワイドキャラクタとも言います。API の名前が W で終わっているものは、

    文字としてワイドキャラクタを受け取ることを表しています。

     

    私のサイトでも Windows 入門シリーズを少し書いていますので、

    良かったらご覧ください。(ただし、Visual Studio のプロジェクトは使っていませんが・・・。)

     

    お役に立てれば幸いです。

     

    ---------------------------------------------------------

    だどさん http://keicode.com/

     

    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年1月27日 7:51
  • 簡単な内容ですけど載せておきます。

    誰かに説明したり、文書に書いたりするのであれば、自分できちんと理解できるように調べた上でお願いします。

     

     kounext さんからの引用

    1.なぜ「Win32プロジェクト」でプログラムを作成しなければならないのか。

     というよりコンソロールとプロジェクトの違いがわかりません。

    「コンソール」でしょう。

     

    コンソールアプリケーションは、コマンドプロンプトベースで処理を行うアプリケーションです。

    基本的に操作を含めて、コマンドラインで処理するユーザインターフェース(CUI)となります。

     

    一般的なWindowsアプリケーションは、グラフィカルユーザインターフェース(GUI)を採用しており、コンソールアプリケーションとは作りが大きく異なります。

     

    それ以上の解説は、ご自身で納得のいく説明に出会うまで、「コンソールアプリケーション」等のキーワードで調べ回って下さい。

     

     kounext さんからの引用

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     Unicodeとマルチバイトの最大の違いは何でしょう?

    Unicodeについてはオフィシャルのホームページもあります。

     

    http://www.unicode.org/faq/basic_q.html

    Unicode is the universal character encoding, maintained by the Unicode Consortium. This encoding standard provides the basis for processing, storage and interchange of text data in any language in all modern software and information technology protocols. See "What is Unicode?" for a short explanation of what Unicode is all about. That page is translated into more than 50 languages, to illustrate the use of the standard. See for yourself!

     

    MSDNにも語っているページはありますね。

     

    Unicode と MBCS

    http://msdn.microsoft.com/ja-jp/library/cwe8bzh0.aspx

    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年1月27日 15:04
    モデレータ
  • だどさん の発言:

    Unicode とマルチバイトの最大の違いは、Unicode が1文字を表すのに 「ユニ」(単一)コードであり、後者がマルチな (複数) バイトの文字列ということです。

     unique ではなく、universal の uni のような?単一なら、「モノ(mono)」とか「single」とか。

    シフト JIS などのエンコーディング方式では、1文字を表すのに1バイトだったり2バイトだったりします。これをマルチバイト文字セット (MBCS) といいます。一方、ユニコードは1文字を表すのに、常に2バイトとする文字集合です。これが一番の違いでしょう。

    単に Unicode だと、この説明は、正しいとは言えません。Unicode でも、1文字を1バイトで表したり、4バイトで表したりします。

     たとえ UTF-16(.NET Framework の String クラスで扱う文字)に限っても、4バイト文字がありますし、合成文字を含めると1文字が何バイトでできているかわかりません。


     もちろん、初心者向けに「2バイトで1文字を表す(ただし例外あり)」と説明するのはありだと思います。



    kounext の発言:

    「誰にでもわかるように」とは、プログラムを初めて作成するような人を対称にしています。

     それでも、まだ広いです。

     program とは、「ある作業を行うために必要な手順」です。「ある作業」を「手順」に分解できるかどうか、「手順」をプログラミング言語に置き換えられるかどうか、というところですでに差があります。

     また、「はじめて作成する」にしても、作成する前に準備する人と、準備しない人がいます。ここにも差があります。


    Jitta@わんくま同盟
    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年2月4日 12:31
  • Jitta さん、ご指摘ありがとうございます!

    ただ、ちょっと疑問もありますので、補足させていただきます。

     unique ではなく、universal の uni のような?単一なら、「モノ(mono)」とか「single」とか。

    uni は確かに unique の略ではなく、uni- は prefix で one とか single を表します。

    # 有名な例では (ご存知と思いますが) Multix に対する Unix の uni です。

    単に Unicode だと、この説明は、正しいとは言えません。Unicode でも、1文字を1バイトで表したり、4バイトで表したりします。

     たとえ UTF-16(.NET Framework の String クラスで扱う文字)に限っても、4バイト文字がありますし、合成文字を含めると1文字が何バイトでできているかわかりません。

     もちろん、初心者向けに「2バイトで1文字を表す(ただし例外あり)」と説明するのはありだと思います。

    初心者に対する簡略化の部分については、BMP についての説明を省くところのつもりでした。コードを書く上では現状、Unicode ビルドは Wide character (=16bit) でのビルドを指しますので、そこは厳密にいく必要は無いと思いました。

    UTF については、もちろん知っていましたがあれはエンコード方式であって、別のトピックだと思いました。

    こちらは MBCS として、おそらく最初の質問された方は、Shift_JIS を考えていたと思ったので、「Unicode は Shift_JIS みたいに、符号化文字集合とエンコーディング方式といろいろ混ざって、大変なのじゃなくて、もっとシンプルですよ」 ということを言いたかったのです。

    ちょっと説明が雑でしたかね・・・。失礼しました!

    ---------------------------------
    だどさん http://keicode.com/


    • 回答としてマーク kounext 2009年2月5日 13:29
    2009年2月4日 23:43

すべての返信

  • 前スレと言われても、探さないと分からないので、リンクを張っていただければと思います。

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=4101726&SiteID=7

     

     kounext さんからの引用

    1.なぜ「Win32プロジェクト」でプログラムを作成しなければならないのか。

    そのプロジェクトで作ることを前提とした書籍だからでしょう。

     

     kounext さんからの引用

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

    Visual Studio.NET 2003までとデフォルトの設定が変わったからです。

    その書籍がVisual Studio.NET 2003までのデフォルトを前提とした構成になっているため、Visual Studio 2005以降では設定を変える必要があるということです。

     

     

    ここからは厳しい発言になります。

     

     kounext さんからの引用

    超初心者なので、専門用語がわかりません。

    なので誰にでもわかるような書き方でお願いします。

    フォーラムの回答者はあなたの先生や担当上司ではありませんし、責任を負える立場でもありません。

    そして、どの程度説明すれば理解して頂けるかといったことも、(少なくとも)私には分かりません。

     

    # 「誰にでもわかるような書き方」というのは、前提条件を定めていないと実現困難です。

    # 極端な例ですが、Windowsを触ったことのない人も「誰にでもわかる」の範囲に入れるという解釈も可能です。

     

     kounext さんからの引用

    これがわからないままだと、高校の卒業が危ういので

    本当に申し訳ないのですが急速な返信よろしくお願いします。

    急を要することなら、先生に聞いて、理解を深めるとかした方が良いと思います。

    対面で話した方が、分かりやすく、丁寧に教えてもらえる可能性が高いです。

    (タイムラグのある文章だけのコミュニケーションでは限界がある)

     

    また、フォーラムの利用者に人生を左右しかねないことを、質問しないで下さい。

     

     

    今回は卒業の要件とのことですが、今後も仕事なり、学業なりで色々と要求されることがあるかと思います。

    その度に丸投げしていては、この道を続けていけなくなるので、ご自身で理解・調査できるようになって下さい。

    2009年1月26日 15:11
    モデレータ
  • Azuleanさん回答ありがとうございます。

     

    「誰にでもわかるように」とは、プログラムを初めて作成するような人を対称にしています。

     

    つたない文章ですみません。

    2009年1月27日 4:08
  • こんにちは。

     

    1 はご質問の意味がわかりませんでしたので、2番だけ...

     

     kounext さんからの引用

    なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     

    前のスレッドをみましたが、Unicode ビルドの設定になっているために、マルチバイト文字から、

    ワイドキャラクタへの変換の必要が出てきてしまい、そこでコンパイルが失敗しているからだと思います。

    そのため、「マルチバイト文字の設定にしたらうまくいくんじゃないでしょうか」 という

    アドバイスになったんだと思います。

     

     kounext さんからの引用

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     Unicodeとマルチバイトの最大の違いは何でしょう?

     

    Unicode とマルチバイトの最大の違いは、Unicode が1文字を表すのに 「ユニ」(単一)コードであり、

    後者がマルチな (複数) バイトの文字列ということです。

     

    # ふざけているのではなく、本当です。

     

    シフト JIS などのエンコーディング方式では、1文字を表すのに1バイトだったり2バイトだったりします。

    これをマルチバイト文字セット (MBCS) といいます。一方、ユニコードは1文字を表すのに、常に

    2バイトとする文字集合です。これが一番の違いでしょう。

     

    ちなみに、Windows ではワイドキャラクタとも言います。API の名前が W で終わっているものは、

    文字としてワイドキャラクタを受け取ることを表しています。

     

    私のサイトでも Windows 入門シリーズを少し書いていますので、

    良かったらご覧ください。(ただし、Visual Studio のプロジェクトは使っていませんが・・・。)

     

    お役に立てれば幸いです。

     

    ---------------------------------------------------------

    だどさん http://keicode.com/

     

    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年1月27日 7:51
  • 簡単な内容ですけど載せておきます。

    誰かに説明したり、文書に書いたりするのであれば、自分できちんと理解できるように調べた上でお願いします。

     

     kounext さんからの引用

    1.なぜ「Win32プロジェクト」でプログラムを作成しなければならないのか。

     というよりコンソロールとプロジェクトの違いがわかりません。

    「コンソール」でしょう。

     

    コンソールアプリケーションは、コマンドプロンプトベースで処理を行うアプリケーションです。

    基本的に操作を含めて、コマンドラインで処理するユーザインターフェース(CUI)となります。

     

    一般的なWindowsアプリケーションは、グラフィカルユーザインターフェース(GUI)を採用しており、コンソールアプリケーションとは作りが大きく異なります。

     

    それ以上の解説は、ご自身で納得のいく説明に出会うまで、「コンソールアプリケーション」等のキーワードで調べ回って下さい。

     

     kounext さんからの引用

    2.なぜ文字の設定を「マルチバイト文字に設定」しなければならないのか。

     Unicodeとマルチバイトの最大の違いは何でしょう?

    Unicodeについてはオフィシャルのホームページもあります。

     

    http://www.unicode.org/faq/basic_q.html

    Unicode is the universal character encoding, maintained by the Unicode Consortium. This encoding standard provides the basis for processing, storage and interchange of text data in any language in all modern software and information technology protocols. See "What is Unicode?" for a short explanation of what Unicode is all about. That page is translated into more than 50 languages, to illustrate the use of the standard. See for yourself!

     

    MSDNにも語っているページはありますね。

     

    Unicode と MBCS

    http://msdn.microsoft.com/ja-jp/library/cwe8bzh0.aspx

    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年1月27日 15:04
    モデレータ
  • お二方ともにありがとうございます。

    大分わかってきた気がします。

    C++を使ってて不意に思ったのですが、

    「結局オブジェクト指向って何?」と

    「C++はCと関係がある?ない?」

    です。

    WindowsAPIについても調べたのですが、これは

    レ○ブロックに例えると「ブロックの中身」のような捕らえ方をしているのですが間違っているでしょうか?

    よろしくお願いします

     

    2009年1月29日 11:31
  • C++の入門書を手にお取り下さい。

    ゲームプログラミングとか方向性のついたものではなく、言語にフォーカスを当てたもので学習する方が、疑問を少しずつ聞くよりも早く、確かに理解できると思います。
    自分に合う入門書が分からないというのであれば、大きな書店に出向いてみて下さい。

    厳しいことを言うようですが、「C++はCと関係がある?ない?」と聞くという時点で、初歩から見直した方が良いと私は思います。


    参考になった回答には「回答済みチェック」をつけましょう(複数に指定できます)。他の人が検索で情報を得やすくなります。
    2009年1月29日 13:35
    モデレータ
  • ありがとうございます

    見直してみようと思います

    2009年1月29日 14:18
  • kounext の発言:

    WindowsAPIについても調べたのですが、これは
    レ○ブロックに例えると「ブロックの中身」のような捕らえ方をしているのですが間違っているでしょうか?
    よろしくお願いします

    「Windows API は 『ブロックの中身』 のようなものかどうか」

    ということについてですが、 それはどういう意味でしょうか?
    もう少し具体的に書いていただけますか?

    あるいは、やはりもう少し入門書など、勉強したらいいかもしれませんね。私のサイトに、簡単にプログラミングの学び方について、私の考えを書かせてもらっています。参考にしてみてください。

    ---------------------------------
    だどさん http://keicode.com/


     

    2009年1月30日 1:08
  •  「結局オブジェクト指向って何?」ってのは範囲が広いので

    オブジェクト指向「プログラミング」に絞って勉強されると良いと思います。

    オブジェクト指向分析やら開発手法やらいろいろなものに「オブジェクト指向」という単語がくっついるので単純に「オブジェクト指向」と言った時に何を指しているのか分からないことがよくあります。

    2009年1月30日 10:39
  • だどさん の発言:

    Unicode とマルチバイトの最大の違いは、Unicode が1文字を表すのに 「ユニ」(単一)コードであり、後者がマルチな (複数) バイトの文字列ということです。

     unique ではなく、universal の uni のような?単一なら、「モノ(mono)」とか「single」とか。

    シフト JIS などのエンコーディング方式では、1文字を表すのに1バイトだったり2バイトだったりします。これをマルチバイト文字セット (MBCS) といいます。一方、ユニコードは1文字を表すのに、常に2バイトとする文字集合です。これが一番の違いでしょう。

    単に Unicode だと、この説明は、正しいとは言えません。Unicode でも、1文字を1バイトで表したり、4バイトで表したりします。

     たとえ UTF-16(.NET Framework の String クラスで扱う文字)に限っても、4バイト文字がありますし、合成文字を含めると1文字が何バイトでできているかわかりません。


     もちろん、初心者向けに「2バイトで1文字を表す(ただし例外あり)」と説明するのはありだと思います。



    kounext の発言:

    「誰にでもわかるように」とは、プログラムを初めて作成するような人を対称にしています。

     それでも、まだ広いです。

     program とは、「ある作業を行うために必要な手順」です。「ある作業」を「手順」に分解できるかどうか、「手順」をプログラミング言語に置き換えられるかどうか、というところですでに差があります。

     また、「はじめて作成する」にしても、作成する前に準備する人と、準備しない人がいます。ここにも差があります。


    Jitta@わんくま同盟
    • 回答としてマーク kounext 2009年2月5日 13:28
    2009年2月4日 12:31
  • Jitta さん、ご指摘ありがとうございます!

    ただ、ちょっと疑問もありますので、補足させていただきます。

     unique ではなく、universal の uni のような?単一なら、「モノ(mono)」とか「single」とか。

    uni は確かに unique の略ではなく、uni- は prefix で one とか single を表します。

    # 有名な例では (ご存知と思いますが) Multix に対する Unix の uni です。

    単に Unicode だと、この説明は、正しいとは言えません。Unicode でも、1文字を1バイトで表したり、4バイトで表したりします。

     たとえ UTF-16(.NET Framework の String クラスで扱う文字)に限っても、4バイト文字がありますし、合成文字を含めると1文字が何バイトでできているかわかりません。

     もちろん、初心者向けに「2バイトで1文字を表す(ただし例外あり)」と説明するのはありだと思います。

    初心者に対する簡略化の部分については、BMP についての説明を省くところのつもりでした。コードを書く上では現状、Unicode ビルドは Wide character (=16bit) でのビルドを指しますので、そこは厳密にいく必要は無いと思いました。

    UTF については、もちろん知っていましたがあれはエンコード方式であって、別のトピックだと思いました。

    こちらは MBCS として、おそらく最初の質問された方は、Shift_JIS を考えていたと思ったので、「Unicode は Shift_JIS みたいに、符号化文字集合とエンコーディング方式といろいろ混ざって、大変なのじゃなくて、もっとシンプルですよ」 ということを言いたかったのです。

    ちょっと説明が雑でしたかね・・・。失礼しました!

    ---------------------------------
    だどさん http://keicode.com/


    • 回答としてマーク kounext 2009年2月5日 13:29
    2009年2月4日 23:43
  • みなさんありがとうございます

    すごく遅れてしまったのですが、

    皆さんのおかげで少し理解ができました。

    ありがとうございました。
    2009年2月5日 13:27
  • (EUC_JP を触っていたので)「半角カタカナは1バイトだ」というのに反発したいことの延長で、「Unicode だとサイズ固定だ」ということに反発したいのです。本題じゃないところに反応してごめんなさい。


    Jitta@わんくま同盟
    2009年2月5日 14:16