タグ

C++に関するnekotankのブックマーク (24)

  • VisualStudioでC/C++ビルド時,stdio.hやkernel32.libなど基本的なモジュールが見つからないときの対処法 - 結果だけでなく過程も見てください

    ※2016/12/16全面刷新 ※私の認識に誤りがあり,どうやらVisualStudioのincludeやlibのパス設定方法がまずかったようです。 ※またパス展開用のマクロ名が,古いVisualStudioのもの(つまり移行時に発生しやすい?)だった場合も ※問題が起きる気がします。。。 今回の環境 Windows XP(32-bit) + Visual Studio 2005 Professionalから Windows 7(64-bit) + Visual Studio 2010 expressへ移行テストで問題発生。 Windows 10(64-bit) + Visual Studio 2015 Community導入時にも同様の問題が発生しました。 問題 - hello, worldできない! 10年もプログラム組んでてprintfも知らんのか!という話ではなく。 ↓の何の変哲も

    VisualStudioでC/C++ビルド時,stdio.hやkernel32.libなど基本的なモジュールが見つからないときの対処法 - 結果だけでなく過程も見てください
  • 実践C++入門講座第18回目 文字コードとVisual C++の悩み | Theolizer®

    こんにちは。田原です。 今回は、前回に引き続き、文字の内部表現について解説します。まず¥マーク問題、次に日語文字コードについて解説します。文字コードについては当に奥深いのですが、ここでは各種表示を日語で出力する程度の「普通」の日語対応するプログラムを開発する際に知っておくべきこと中心に解説します。 特に昔から日語対応が進んでいたWindowsは過去幾つかの不幸な決定が重なった結果、頭の痛い問題が複数あります。そして、互換性の維持のためなかなか対策できず、未だに完全解決には程遠い状態です。それらの問題が発生する仕組みと問題を軽減する対策についても一部解説します。 既に経験された方も多いと思いますが、¥マークが \(バックスラッシュ)に化けるように見える問題です。原因は簡単です。¥マークと\(バックスラッシュ)は文字コードが同じ値なのです。どちらとも0x5cなのです。次のようになって

    実践C++入門講座第18回目 文字コードとVisual C++の悩み | Theolizer®
  • Visual C++における文字コード変換 - C++と色々

    前提環境 日語版WindowsかつVisual C++の環境の話です*1。Windows以外のOSや非日語のWindows、Visual C++以外のコンパイラは当てはまりません。 用語 ここでは char const* の文字列や char の文字 std::string で表現されるマルチバイト文字(列)をまとめて string と表現します。また、 wchar_t const* の文字列 wchar_t の文字、 std::wstring で表現されるワイド文字(列)をまとめて wstring と表現します。 文字列と文字を区別すると文章が長くなるため一律文字と表現します。 内部表現 前述の環境において、stringの内部表現にはShift_JISが使われています。また C++11で入ったUTF-8リテラルの型にもstringが使われています。つまりstringにはShift_J

    Visual C++における文字コード変換 - C++と色々
  • C++/CLIの使い方 超基本を今更おさらい。 - 亀岡的プログラマ日記

    先日書いたように、業務でC++/CLIを使いそうなので、その準備も兼ねてお勉強中です。とりあえず、超簡単なサンプルで呼び出しまではできるようにしたので、そこらへんをメモがわりに書いておこうかと思います。 超簡単サンプル概要 プロジェクトは超シンプルです。受け取った文字列に”Echo”と書き加えて返してくれる、というだけのクラスをネイティブ側で実装し、それをC++/CLIでラッピング。さらにそれをWinFormから読んでみます。 はまったところ ポインタでしかC++のクラスは持てない そうなんですよね。C++プロジェクトで作っているクラスのメンバをC++CLIでは持つことはできません。ポインタなら持てます。まあ内部的にはIntPtrで持てるからってことなのでしょう。 文字列変換周り とりあえず今回はstd::stringとの相互変換のみ。これはもう全面的にこちらを参考にしてます。 C++/

    C++/CLIの使い方 超基本を今更おさらい。 - 亀岡的プログラマ日記
  • C++/CLIのデストラクタ/ファイナライザって難しい - .NET Claimwork 3.0

    OpenCVでカメラからのキャプチャを行うような事をC++/CLIでやろうとしています。で、まあリソース管理の為のコードを書くのは避けて通れない訳で、Disposeパターンに従って作ろうとしたら、public: virtual void Dispose(bool);が通らない......予約されていると? と思って見てみたら、こんなページがMSDN Libraryにありました。 Destructors and Finalizers in Visual C++ URIが日語用(ja-jp)なのに翻訳されていないというのはとりあえず置いておいて、C#に慣れた頭で読んでみると驚きの連続でした。ついでに眠いせいか難しい。一通り読んだだけでは収拾がつかないので、デストラクタ(Wikipedia)なども見つつ重要そうな所を僕なりにちょっとまとめてみます。 C++/CLIにおけるデストラクタとファイナ

  • C++ で正規表現を使用する - C++ プログラミング

    C++ でも C++11 規格で正規表現が標準サポートされました。 正規表現といえば文字列を効果的に判定・抽出する有名な仕組みなので、Xcode や Visual Studio でもいち早く採用されているので、多くの場面で安心して利用できます。 ただし、正規表現のパターンを書くのに相性の良い raw 文字列は Visual Studio 2012 ではサポートされていないところは残念です。 raw 文字列については raw 文字列を使ってエスケープ文字を省略する に整理してあります。

  • shared_ptrを使おう - ...ing logging 4.0

    当然だがほとんどの後輩がshared_ptrを知らないみたいなので,いつかC++講座で使うための説明用資料としてここに書いておく. 概要 shared_ptrを使うとnewして作成したオブジェクトを明示的にdeleteしなくてもよくなる. 原理的に,どこからも参照されなくなったオブジェクトにアクセスする方法は存在しないので,そのオブジェクトはもう破壊してしまっても問題がない. shared_ptrは,オブジェクトが参照されている数をカウントしておいて(参照カウントと言う),参照カウントがゼロになるときに参照先のオブジェクトを1回だけdeleteしてくれる. shared_ptrはauto_ptrと同じスマートポインタの一種であり,次期C++の標準ライブラリに導入される.それと同時にauto_ptrは非推奨となる. サンプル 環境はSP1を適用済みのVS2008. VS2008SP1を入れて

    shared_ptrを使おう - ...ing logging 4.0
  • Quick C++/CLI - Learn C++/CLI in less than 10 minutes

    Introduction Welcome to my second article on .NET programming, specifically about C++/CLI. Shortly after I wrote the previous article, the C++/CLI was becoming more in use, thus rendering MC++ obsolete. If you've read the previous MC++ article, then reading this one is easier and will only update your knowledge. The goal of this article is to present you with most of the information needed for you

    nekotank
    nekotank 2014/02/21
    [C++/CLI][tips]10分で学ぶ C++/CLI
  • VC++からExcelを操作する(Excelアプリケーションへアタッチ) - hippos-lab::net(別館)

    CApplicationクラスを使ってExcelへアタッチする Excelを操作するためにはまずExcelアプリケーションそのものにアタッチする必要があります。タイプライブラリで生成したCApplicationクラスを使用します。手順は以下の通り単純です。ただし、アタッチの際既にExcelが起動しているかどうかにより動作が異なりますのでその点には注意が必要です。 クラスIDの取得 アプリケーションへのアタッチ クラスIDの取得 CLSID clsid; if (CLSIDFromProgID(OLESTR("Excel.Application"), &clsid) != NOERROR){ AfxMessageBox("Excel not installed or version not compatible"); return; } このコンテンツではMFCアプリケーションを想定していま

    nekotank
    nekotank 2014/02/19
    VC++での Excel の操作
  • TopCoderから学ぶ美しいマクロや型宣言 C++ - peroon's diary

    TopCoderというプログラミングコンテストで 他人のコードから発見した、美しいマクロや 型宣言を紹介します。 これを導入することで、C++のコードが短くなり、 早くコーディングすることができます。 ※すべてのTopCoder参加者がマクロなどをテンプレートと して用意しているわけではありません。 マクロなどを定義している人は半分より少ないようです。 TopCoderの他人のコードを参考に、 マクロやtypedefによる型宣言をまとめました。 コードの全体はこのようになっています。 (あとで個別にコメントします) //include //------------------------------------------ #include <vector> #include <list> #include <map> #include <set> #include <deque> #in

    TopCoderから学ぶ美しいマクロや型宣言 C++ - peroon's diary
  • 配列コピー時に犯しやすい誤りに注意する ――C/C++セキュアコーディング入門(6)

    データをコピーする先の記憶領域として十分なサイズが確保されていないと、バッファオーバーフローに繋がります。例えば、コピー先の領域として確保するサイズが不十分だったり、コピー先の領域は意図どおり確保していても、コピーするデータのサイズを誤って指定してしまう場合などです。 典型的な誤りとしては、文字列コピーにおけるNULL終端バイト分のサイズの配慮し忘れがあります(関連ルール「STR31-C. 文字データとNULL終端文字を格納するために十分なサイズの領域を確保する」を参照)。 また、コピーサイズを計算する際に整数オーバーフローが発生したり、正の値を処理することを想定しているロジックに負の値を持った符号付き整数を渡すことで、暗黙の変換により大きな正の値として扱われて問題を起こすケースもあります(関連ルール「STR31-C. 文字データとNULL終端文字を格納するために十分なサイズの領域を確保す

    配列コピー時に犯しやすい誤りに注意する ――C/C++セキュアコーディング入門(6)
  • その3 デバッグウィンドウを知らないと大変です

    ホーム < ゲームつくろー! < デバッグ技術編 その3 デバッグウィンドウを知らないと大変です その1でブレークポイントを設定してプログラムを一時的に止めてステップ実行するデバッグの基を紹介しました。このデバッグはプログラムが一時停止するので「静的なデバッグ」です。でも、例えばゲームのキーが正しく入力されているかを調べるには、プログラムが動き続けてくれないといけません。また状態遷移などが上手く動いているかをチェックする時にステップ数が膨大になるとデバッグに時間がかかってしまいます。 静的なデバッグが厳しい状況ではステップ実行は非効率です。そういう時は動かしながらリアルタイムで数値の変化を見るのが得策です。しかし、自動変数ウィンドウなどはステップ実行時以外は見ることができませんので、別の出力を設ける必要があります。その候補の1つがデバッグウィンドウ(出力ウィンドウ)です。 この章ではデバ

  • C/C++言語 開発環境

    gistfile1.md Windows/Linuxで両方で動作する成果物を想定。 有償のツールは理解が得られる方が稀なので除外。 仕様書 外部仕様 Word/Excelが手軽だけど差分が追いにくい。 Markdown+PandocかSphinxでPDF提出がいいかな? Pandoc - About pandoc Sphinx-Users.jp :: ドキュメンテーションツール スフィンクス Sphinx-users.jp 内部仕様 きちんと書いてあればDoxygenで十分だと思う。 Cしか対応していないみたいだけどdocuriumの方がgitとの親和性が高くて(tag付された結果をまとめて解析してくれるみたい)出力結果も今風にできてる。 Doxygen github/docurium インセプションデッキ 作っておくと上司/部下/協力メンバで方針を合わせやすい。 ネスケラボ » インセプ

    C/C++言語 開発環境
  • 『コンストラクタで書かれるコロン「:」って何?』

    C++ フリーでぷろぐらみんぐ 逆引きリファレンス。 C++のやりたい事から引ける逆引きメモを書いています。 何かコメントなどいただけると嬉しいです! クラスのコンストラクタのコードを書くときに、コロン「:」が良く使われます。 これって何でしょう? 最初の頃、これが良く分からなくて調べてみると、 メンバー変数や親クラスを初期化するものだと分かりました。 <コンストラクタ1> XXClass() : m_str("###") {}; こんな具合に記述されると、m_strがstringならば以下のコードが呼ばれたのと同じことです。 string m_str("####"); それだと、コンストラクタで次のように書くのと同じだと思いません? <コンストラクタ2> XXClass() { m_str = "###"; }; 私もかつてそう思ってました。 コロンは見づらいので、{}の中で記述するほう

    『コンストラクタで書かれるコロン「:」って何?』
  • コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog

    これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We

    コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog
  • Windows 8のC++でプログラミングの常識がひっくり返った

    「C言語とC++がわかる」というムック(2013年4月2日発売)の作業で、Windows 8/RTで動く「Windowsストア アプリ」をC++で作った。元記事はVisual BasicとC#(シーシャープ)で作っていたので、それをC++で書き直すというわけだ。 これが想像をはるかに超えて難しく、土日に働き続けるのはもちろんのこと、1日の睡眠時間を2時間に削ったりして長時間取り組んでも、思うように進まなかった。印刷会社にデータを渡す日は近付くしプログラムは動かないしで、10年に1度クラスの大ピンチ。冷や汗をかき、涙目になりながら書き続けて何とか間に合わせたのだが、どこが最大の難所だったかというと、「順次処理を書いたつもりなのに順次処理してくれない」という、常識破りの大変化があったことだと思う。 手続き型のプログラミング言語でプログラムを書く場合、プログラマが と記述したら、コンピュータは

    Windows 8のC++でプログラミングの常識がひっくり返った
  • [C#][SDL][union] C# で、C の共用体を実現するには? - 想像力の欠如は深刻な欠点の一つである。

    おくればせながら、あけましておめでとうございます。今年もよろしくおねがいします。 今日、SDL.netgithub にうpした。 SDL.net は SDL の C# binding である。 これを書くときにつまづいたことなどを書いてみる。 まずは SDL_event.h からコピペしたコード片を見て欲しい。 typedef union SDL_Event { Uint8 type; SDL_ActiveEvent active; SDL_KeyboardEvent key; SDL_MouseMotionEvent motion; SDL_MouseButtonEvent button; SDL_JoyAxisEvent jaxis; SDL_JoyBallEvent jball; SDL_JoyHatEvent jhat; SDL_JoyButtonEvent jbutton;

    [C#][SDL][union] C# で、C の共用体を実現するには? - 想像力の欠如は深刻な欠点の一つである。
  • [Visual C++] LoadLibrary が失敗する原因

    この記事は3年以上前に書かれた記事です。情報が古い可能性があります。 Win32でDLLを明示的ロードするとき、LoadLibrary API関数を使用するのだけど、この引数に渡すDLLファイルのパスが正しいにも関わらず失敗(戻り値 0)することがある(フルパスで指定しても失敗する)。 引数に渡したDLLがあからさまに存在するのに失敗する場合、対象DLLが別のDLLを使用していて、そちらのロードに失敗している可能性がある。なので、対象DLLが使用しているDLLが存在するか調べる。 Visual Studio 付属ツールの dumpbin を使う。(Linux でいえば ldd みたいなやつ) dumpbin /dependents hoge.dll ここに表示されるDLLもちゃんと存在するか(パスが通っているか)確認する。

    [Visual C++] LoadLibrary が失敗する原因
  • http://ch.cri-mw.co.jp/hirase/199.html

  • 2009-05-09

    RCを使って10日程度。Windows Vistaの焼き直しに過ぎないと思います。スピードも特に速くなっているとは思えません。少なくとも、Core i7 12GBとかいう環境では。 良いところ でも、もう、Vistaには戻れないんだな。これが。 個人的に、この機能があるからWindows 7を使いたいと思える機能群は、 拡大鏡 この滑らかさは癖になる。未だかつて使ったどんな拡大鏡ツールよりも滑らかでかつ実用的。Windows VistaでDWMを導入した甲斐があるって言うものだ。 あとは、おもしろいのは、拡大鏡で拡大している状態で、[Print Screen]を押した場合の挙動。なんと、拡大された状態のスクリーンがキャプチャできる。 で、後は、なぜか、ウィンドウのキャプションというか、タイトルバーだけは、他の部分と拡大方法が違うんだな。Windows Media Centerとか、XPS

    2009-05-09