タグ

ブックマーク / dev.activebasic.com (7)

  • VC++ 2015で作ったDLLをWindows XPで動かすと最悪死ぬ - イグトランスの頭の中

    Visual C++ 2015でコンパイルしたプログラムを試していたところ、Windows XPでプロセスが問答無用で死ぬ現象に見舞われました。いろいろ試してみた結果、およそ原因・回避方法が分かりましたので、ここに書き記します。 条件・症状 次の条件をすべて満たす場合に注意が必要です。 Visual C++ 2015でDLLをビルドする そのDLLはLoadLibraryなどで実行時に読み込まれる Windows XPで実行される このとき、次の新機能のいずれも使ってはなりません。死にます。 thread_local 関数内でのstatic変数 死ぬというのは、プロセスの強制終了のことです。 なお、関数内でのstatic変数のVC++ 2015の新機能とは、初期化処理が複数スレッド対応(コンパイラが適切に排他制御するコードを出力する)になるという、C++11仕様への対応です。参考: sta

    VC++ 2015で作ったDLLをWindows XPで動かすと最悪死ぬ - イグトランスの頭の中
    t-murachi
    t-murachi 2015/09/21
    Microsoft もサポート切ってるわけだし、むしろこれを理由に XP サポート打ち切る方向で進んでいったほうがいいんじゃないかな…(´・_・`)
  • goto fail、到達しないコードにVC++で警告を出す - イグトランスの頭の中

    ここ最近、Appleの例のバグで大盛り上がりですね(Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス? | アプリオ)。 さて問題になったようなコード、Visual C++でも警告は出るよね、という確認です。 int ReadyHash(void*, void*); int SSLHashSHA1_update(void*, void*); int SSLHashSHA1_final(void*, void*); int sslRawVerify(); void f() { int SSLHashSHA1; int hashCtx; int clientRandom, serverRandom, signedParams; int hashOut; int err; if((err = ReadyHash(&SSLHashSH

    goto fail、到達しないコードにVC++で警告を出す - イグトランスの頭の中
    t-murachi
    t-murachi 2014/03/24
    「なお、GCCでは-Wunreachable-codeオプションを使えば良いそうです」
  • Boost.ThreadとBoost.Optional - イグトランスの頭の中

    次の2つを混ぜます。 std::threadをあとから開始。それとムーブ対応したコンテナについて – Faith and BraveC++で遊ぼう Boost.Optional と Boost.InPlaceFactory で初期化遅延 – 銀天随筆集 Boost.Optionalで初期化を遅らせる技法をBoost.Thread(コンストラクトするとスレッドが動き出す)と組み合わせるとどうなるか、任意のタイミングで実行を開始できるようになるというわけです。 そんなわけで、Akiraさんの「std::threadをあとから開始。それとムーブ対応したコンテナについて」の記事の冒頭のコードをBoost.OptionalとIn place facotryで書き直したものがこちらです。 #include <iostream> #include <boost/optional.hpp> #inc

    Boost.ThreadとBoost.Optional - イグトランスの頭の中
    t-murachi
    t-murachi 2012/04/19
    いろいろと書き方があるのね。
  • Windows 8はXDDM (XP Display Driver Model)に対応しない - イグトランスの頭の中

    こんな資料を今頃になって見つけました:Windows 8 Developer Preview での WDDM の強化。2011年10月11日公開のようです。 「PART 1: WDDM in Windows 8」に、「Windows 8はXDDMをサポートしないよ」という重要事項が書いてあったので、軽く紹介します。 軽くおさらい、XDDMはXP Display Driver Modelの略(XPDMという表記もよく見かける)で、2000/XP世代のディスプレイドライバになります。しかしながら、Vista/Server 2008 (NT 6.0)や7/Server 2008 R2 (NT 6.1)でも利用可能でした。参考:Windows 7 のグラフィックスの変更点を整理する – NyaRuRuの日記。 XDDMをサポートしなくなった結果、XDDMである汎用の標準VGAドライバも、WDDM

    Windows 8はXDDM (XP Display Driver Model)に対応しない - イグトランスの頭の中
    t-murachi
    t-murachi 2012/03/17
    humm...
  • ラムダ式で再帰する1つの方法 - イグトランスの頭の中

    上記記事の内のコードでは、ラムダ式で再帰を実現するために、自分自身が格納される変数を「キャプチャ」しています。しかし、それだけがすべてではありません。 もう1つ、「引数に取る」という方法があります。しかも都合の良いことに、この方法にはお決まりのパターンが存在するのです。次のコード内のFixという関数がその役を果たします。 このFixは不動点演算子などと呼ばれるものになります。3年くらい前に、はてなダイアリー界隈で流行したので、ググれば今でもいろいろ出てきます。 さあ、Yコンビネータ(不動点演算子)を使おう! – よくわかりません ラムダ計算とチューリングマシンの違い – きしだのはてな Y コンビネータって何? – IT戦記:型のあるC++では、こうは行かないと思います。

    ラムダ式で再帰する1つの方法 - イグトランスの頭の中
    t-murachi
    t-murachi 2012/03/11
    Yコンビネータとか超ナツカシス
  • std::to_stringはlocale指定の影響を受けるのか、またどういう書式なのか気になった - イグトランスの頭の中

    C++11のto_string関数について調べていました。タイトルに書いたとおり、locale指定の影響と、書式の2つを知りたくなったためです。 このコードを動かしてみましょう。これは、Linux上のGCC 4.6.2 (glibc + libstdc++)で動かしました。 #include <iostream> #include <string> #include <locale> #include <clocale> #include <cstdio> int main() { double x = 1234.56; std::cout.imbue(std::locale::classic()); std::setlocale(LC_ALL, "C"); std::cout << "C:\n"; std::cout << '\t' << x << '\n'; std::cout <<

    std::to_stringはlocale指定の影響を受けるのか、またどういう書式なのか気になった - イグトランスの頭の中
    t-murachi
    t-murachi 2011/12/31
    VC++ 相変わらずだな…
  • DoxygenのLaTeX出力で日本語を使う - イグトランスの頭の中

    2015年6月29日追記:現在のDoxygenとW32TeXの状況に合わせて書き直しました。DoxygenのLaTeX出力で日語を使う(2015年版)をご覧ください。 DoxygenのLaTeX出力は、普通のLaTeXもしくはpdfLaTeXを想定しており、そのままでは日語が使えません。そのため、日語を含むドキュメントを最低限文字化けせずにPDF化する方法を調べていました。 必要なもののインストール(初回だけ) Doxyfileの修正(プロジェクトごとに1回だけ) Makefileとrefman.texの修正(doxygenコマンドを実行するたび) まず、以下のものが必要でした。 Doxygen この記事を書いている時点での最新は1.7.6.1でした。しかし、この方法自体は1年くらい前からやり始めたので、もう少し前のバージョンでも可能だと思います。 pLaTeXまたはupLaTeX

    DoxygenのLaTeX出力で日本語を使う - イグトランスの頭の中
    t-murachi
    t-murachi 2011/12/26
    Excellent!! 数年ぶりに TeX を導入したくなってきた。w
  • 1