サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
dev.activebasic.com
WinHTTPにHTTP/2の対応が入ったようです。そこで、簡単にですが確かめてみました。 WinHTTPは、Windowsの汎用的なHTTPとWebSocketのAPIです。そんなわけで、自身でときどき使ったり、使っているアプリをたまに見かけたりします。 フラグをMSDNライブラリで見つけた この前、WinHttpSetOption関数で指定するOption Flagsを見ていたところ、WINHTTP_PROTOCOL_FLAG_HTTP2というものが増えていることに気付きました。 WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL Sets a DWORD bitmask of acceptable advanced HTTP versions. Supported on Windows 10, version 1607 and newer. Possible va
以前の記事、UCRTをアプリと同じフォルダに置く (VS2015 RTM)の更新版です。Visual Studio 2015 Update 1以降の変更を反映させました。 おさらいVisual C++ 2015でCRTの構成が大きく変わりました。C標準ライブラリ関数の多くがucrtbase.dll(リリースビルド), ucrtbased.dll(デバッグビルド)に移され、Windows SDKの配下になりました。これがユニバーサルCRT (Universal CRT; UCRT)です。 ucrtbase.dllはOSの一部という扱いになりました。Windows 10では最初から入っています。Vista~8.1に対してもWindows Updateで配信されており、最新はKB311841です: Windows での汎用の C ランタイムの更新プログラム。なお、VS 2015 RTM時点ではK
Windowsでパケットキャプチャをするなら、WiresharkとWinPcapの組み合わせが最も一般的だと思います。しかし、Windowsにもパケットキャプチャの機能が標準搭載されています。それはnetsh trace startコマンドです。 Windows 7以降のnetsh traceコマンドでパケットをキャプチャする方法 – Eiji James Yoshidaの記録 ならば、自分のアプリからも使えないものかと思い、netsh trace startがやっていることを調べてみました。同じようにAPIを呼び出せば、同じようにパケットキャプチャできるはずという、至極単純な発想です。 というわけで作ったプログラムがこちらです。 gist: “netsh trace start caputre=yes traceFile=D:\packet.etl”の再現 Windows 8.1とSer
この記事は、Windows & Microsoft技術 基礎 Advent Calendar 2015の24日目の記事です。Windows APIプログラミングのあんまり基礎っぽくない内容です。 Windows 8.1には、「リーダー」というPDFビューアー(ストアアプリ)があります。ということは、当然PDFを描画するAPIも追加されています:WinRT/Metro TIPS:Windows 8.1の新機能、PDFを表示するには?[Windows 8.1ストア・アプリ開発] – @IT。これをネイティブC++のデスクトップアプリから使ってみました。 上記記事ではPdfPage.RenderToStreamAsyncで描画してますが、このほかにもIPdfRendererNativeというインタフェースがあります。これには、ID2D1DeviceContextやIDXGISurfaceに描画す
Visual Studio 2015 Update 1でコンパイラが追加されました。Visual C++でコンパイルしたオブジェクトコードとリンクできるClangです。デバッグ情報なども互換で、おそらくVC++でコンパイルしたものと遜色なく扱えるものと思います。 名称はClang with Microsoft CodeGenのようです。Clang/C2という表記も見かけます。オリジナルのClangそのままではなく、後段の最適化・コード生成の部分をVisual C++のもの(c2.dll)に取り替えたものだからです。 より詳しい紹介と導入方法はClang with Microsoft CodeGenがでたので試す – Qiitaを見ると良いでしょう。 さて、このClang/C2をコマンドプロンプトで使ってみました。それについて書きます。 コマンドラインで使うための準備VisualStudio
Sinatra::ContribのSinatra::JSONの話です。 SinatraでJSONを返すだけのものを作ろうとすると、意外と面倒であることに気づきます。Content Typeを設定して、レスポンスボディを返すという2手順が必要だからです。 require 'sinatra' require 'json' get '/' do content_type 'application/json' JSON.generate({message: 'Hello'}) end get '/second' do content_type 'application/json' JSON.generate({message: 'Doumo'}) end なので、ちょっとヘルパーメソッドを作ろうかなと考えるわけです。しかし、誰かが似たようなものを使っているはずです。すなわち、それがSinatra:
Visual C++ 2015でコンパイルしたプログラムを試していたところ、Windows XPでプロセスが問答無用で死ぬ現象に見舞われました。いろいろ試してみた結果、およそ原因・回避方法が分かりましたので、ここに書き記します。 条件・症状次の条件をすべて満たす場合に注意が必要です。 Visual C++ 2015でDLLをビルドするそのDLLはLoadLibraryなどで実行時に読み込まれるWindows XPで実行されるこのとき、次の新機能のいずれも使ってはなりません。死にます。 thread_local関数内でのstatic変数死ぬというのは、プロセスの強制終了のことです。 なお、関数内でのstatic変数のVC++ 2015の新機能とは、初期化処理が複数スレッド対応(コンパイラが適切に排他制御するコードを出力する)になるという、C++11仕様への対応です。参考: static変数初
Visual Studioのプロジェクトファイル(.vcxproj, .csproj, .vbproj, ……)はMSBuildコマンドで取り扱える形式です。ご存じの方も多いでしょう。手で書いたMSBuildプロジェクトをVisual Studioでプロジェクトとして認識させることは可能なのかという疑問がわきました。そして、答えに辿り着きました。 拡張子が.vcxproj, .csproj, .vbprojなど、Visual Studioが認識するものであるなら、なんでも良い。 Build, Rebuild, Cleanという名前のターゲットがあれば、Visual Studioのメニューから呼び出せる。 MSBuildプロジェクトファイルを書く チュートリアル: MSBuild の使用を元に、Hello worldを出力するプロジェクトファイルを作ります。 <?xml version="1
Visual Studioのリソースエディタで特に何もせずダイアログを作る(※)と、かな漢字の表示には最新のWindows 8.1でもMS UI Gochicが使用されます。これをメイリオやMeiryo UIなどにしようというのが今日の内容です。 ※ なお、何も考えずに作るダイアログはDS_SHELLFONTかつ”MS Shell Dlg”ということです。MS Shell DlgがTahomaになり、TahomaからのフォントリンクでMS UI Gothicが使われます。 今回もWTLを使ってそのようなことを実現するクラスを作り、Gistに置いています: gist: CDialogWithThemedFontImpl.h フォントの取得には、以下のようにTheme APIを使用しています。TEXT_CONTROLLABELがこの用途に最もふさわしいものであるという確証を得られなかったのがち
自アプリからエクスプローラへのドラッグ&ドロップにおいて、ファイルシステムやシェル名前空間上に存在しないデータをやりとりする方法があります。それがCFSTR_FILECONTENTSとCFSTR_FILEDESCRIPTORの組み合わせです。ともにMSDNライブラリのShell Clipboard Formatsで説明されています。 これをエクスプローラにドロップすると、ドロップ先にファイルが作成されます。これには、圧縮ファイルの中身を取り出したり、インターネット上からD&D時にダウンロードしたりするなどといった使い道があります。 さて、これについて、Visual C++のネイティブコード (Windows API/ATL/WTL)、Windows Forms、WPFのそれぞれでサンプルコードを書いてみました。それぞれGistに置いてあります。Windows FormsとWPFは自分でID
言ってしまえば、高階関数は便利だねという話でもあるわけです、それに加えてC++特有の事情があるだけで。 C++視点からのRuby紹介 // Speaker Deckの52ページ目の「ブロックを使ったRAIIっぽい機能」より。 ブロックを使ったRAIIっぽい機能 File.openメソッドファイルを開いた後、受け取ったブロックを実行例外の発生有無にかかわらず最後にファイルを閉じるスコープを抜けると自答的にリソースが閉じられるRAIIと共通しているこのような書き方はC++でも有用です。なぜなら、C++には事実上「デストラクタで例外を投げてはいけない」ためです(cf. More Effective C++ 項目11 デストラクタで発生した例外を抑える)。 そこで、ブロック引数のように関数(オブジェクト)を実引数に取る関数という方法です。後処理に失敗する可能性のある処理を抽象化する方法として有力な
.NET言語でクラスID (CLSID) からオブジェクトを作成する方法として、Marshal.BindToMonikerを使う話をします。 よく、Type.GetTypeFromCLSID→Activator.CreateInstanceの組み合わせを見かけます(例:プラットフォーム呼び出し (C# によるプログラミング入門)など)。しかし、Marshal.BindToMonikerとnewモニカの組み合わせでも実現できることを最近知りました。しかもこのほうがより簡単であることは、あまり知られていないように感じます。 紹介・比較まずは、コードを見てみましょう。Marshal.BindToMonikerとnewモニカを使うと、たった1メソッド呼び出しでCOMオブジェクトを作成できます。 dynamic doc2 = Marshal.BindToMoniker( "new:88D96A05-
この記事は、C++ (fork) Advent Calendar 2013の3日目です。 現在、Boostのソースコード管理はSubversionからGitへ乗り換えた上でGitHubへの移行が進められています (github.com/boostorg (Boost.org))。そこで、この記事ではGitリポジトリからBoostを使用する方法のまとめを書きます。 なお、この記事の対象はWindowsです。以下の説明でもmsysGitのgit bashとVisual Studioコマンドプロンプトが混在しています。$で始まる行はgit bash、>で始まる行はVisual C++へのパスが通ったコマンドプロンプトで実行したものです。実行速度が速いのでmsysGitで試しましたが、Cygwinでも可能だと思います。 最新版を使うまず簡単なところからです。masterやdevelopブランチなど
Windows 8.1はカラーフォント対応が入ったようです。これにより、iPhone/iPadならびにOS Xに続く絵文字のカラー化が実現されました。 今のところ私が把握している限り、アプリケーションソフトウェアからカラー表示を使用する方法は2つあります。 Windowsストアアプリにおけるテキスト関係のコントロール (TextBlock/TextBox/RichEditBox)Direct2D/DirectWriteまず1つ目、テキスト関係のコントロールにおける表示です。TextBlock/TextBox/RichEditBoxには、それぞれIsColorFontEnabledプロパティが追加されています。実際、上記のスクリーンショットはTextBoxを貼り付けただけです。 <TextBox Name="Test" IsColorFontEnabled="True" FontSize="
Clang (Apple LLVMコンパイラ)は、Objective-Cのinitやnewを特別扱いしているようです。 次のコードをコンパイルします。 // clang++ -std=c++11 -fobjc-arc -Wall -Wno-unused-variable \ // -framework Foundation t.mm extern "C" { #import <Foundation/Foundation.h> } int main() { @autoreleasepool { auto s1 = [NSMutableString string]; auto s2 = [NSMutableString new]; auto s3 = [[NSMutableString alloc] init]; } } すると、 t.mm:10:9: warning: 'auto' dedu
Visual Studioにも、マクロが搭載されているのは当然というべきでしょう。MS Officeでも、ほぼすべてと言ってよいほどの操作がマクロで実行できたのですから、ましてやそれ以上にプログラマが扱うソフトウェアたるVisual Studioでできないわけがありません。というわけで、ちょっと試してみました。それにしてもGoogleの検索しても日本語の情報が(MSDNライブラリを除いて)まったくといって良いほど見当たらないのが意外です。Excelなんか山ほどあるというのにです。 とりあえず、何かやろうと思い、ビルドする度にTwitterへ投稿を一言行うという、読む側からすればはた迷惑そうなものを作りました。迷惑そうと言っても、気に入らなければスルーもしくはリムーブしてくださいというのがTwitterというものですし、問題ないでしょうという考えで作りました。 マクロ編集を行うウィンドウを呼
2016年10月2日追記: Windows 8.1からこのサンプルでは動作しなくなってしまったようです。Windows Vista~7では動作します。Windows 8は未確認です。 Microsoft.Windows.ActCtxオブジェクトを使うと、レジストリに登録せずCOMコンポーネントが使えます。Activation Context APIのラッパーであり、WSHやHTAにおけるJScript/VBScriptなどのWindows APIを呼べない環境で重宝します。 用意するものは3つです。 利用したいCOMコンポーネント本体(DLLなど)マニフェストファイルスクリプト本体1つ目、サンプルのCOMコンポーネントを作りました: msgbox.cpp。Visual C++ 2010(Expressでも可)でコンパイルできます。Showというメソッドを1つ持った単純なオブジェクトがありま
本記事は、C++11 Advent Calendar 2011 : ATNDの2日目の記事です。 C++のclassは様々な使い方ができます。後発のほかの言語ではいくつもの概念に分かれているものも、C++ではすべてclassということもあります。 そこで、C++でclassを定義する際も、classと一括りにせず、自分がいったいどんなclassを書こうとしているのか明確に意識するとよいのではないだろうかと考えました。そのために、私なりのclassの分類をまとめ、この記事を書くことにしました。 これは、各々のプログラミング言語の経験により違いが出ることと思います。異論もあると思いますので、ご自身でも考えてみるとよいと思います。 以下、この記事では4種類に分類しています。 1つ目は「オブジェクト指向プログラミング (OOP) を実現するクラス」です(長いので以下OOPクラスと略します)。 vi
2012年5月8日追記:以下のサンプルコードは古いです。Windows 8 Consumer PreviewかつVisual Studio 11 βでは、イグトランスの頭の中(のかけら) » Metro styleアプリでのC++と非同期もご覧ください。 「WinRTにはMessage Boxなんてないぜ」ってデモであったのでしょうか。そういう話をよく見かけるのですが、代わりになるものはないわけがないだろうというわけで見つけてきました。 Windows.UI名前空間にあるMessageDialogというものがそれっぽいです。 緑色の背景のページ上で実行しており、黒い部分がMessageDialogの表示です。なお、後ろのページの緑色も本来はもっと明るい色(LimeGreen)で、MessageDialogを表示している間、少し暗くなっている感じです。 using namespace Win
エラーハンドリング勉強会(リンク切れ: http://partake.in/events/9874b92a-4cf0-4a20-a3fe-951239da5612)にて、時間が余っているということで飛び入り発表していました。こんなことなら、初めから参加者として名乗りを上げておけば良かったです。 内容としては、C++11のexception_ptrの使い方を簡単に話しました。そのとき画面に映していたのはこれです: exception_ptr in エラーハンドリング勉強会。 exception_ptrは「ライブラリを作るためのライブラリ」だと私は考えています。使わずに済むならそれに越したことはないです。とは言ったものの、ここではじかにexception_ptrを扱っていますけど。 以下は、そのとき発表した内容を基に、新しく書き起こしたものです。そのため、発表内容(「exception_ptr
EASTLをVisual Studioで使える状態に持って行く話です。急いで書いたので、文章がいつもに増して荒っぽいですがお許しください。 EASTL単体は、githubのpaulhodge/EASTLで公開されています。しかし、これにはMakefileも何もありませんのでちょっと困ります。 そこで、forkを見てみると、CMake用のファイルを追加しているものを見つけました: take-cheeze/EASTL。CMakeを使えばVisual Studioソリューションも簡単に生成できるに違いないということで、今回はこちらを使うことにします。CMakeについては特に解説しませんので、興味ある方は各自調べてください。 git cloneしてもよいのですが、今回はとりあえずアーカイブの形でダウンロードしました。Downloadsをクリックすると、tar.gzまたはzipでダウンロードできます
元ネタ: unnonouno: 動的型情報で仮想関数呼び出しを速くできるか Javaだと実行時の情報を使って更なる最適化ができるという話が途中にありますが、同じようなことはC++でもできます。元の記事のようにインライン展開したコードを手書きしてやる必要はありません。 というわけで、Visual C++ 2010のProfile-Guided Optimization (PGO)でいってみましょう。 元のコードを再掲します。 class Parent { public: virtual ~Parent() {} virtual void fun() = 0; }; class Child : public Parent { public: void fun() {} }; int main() { Parent* c = new Child(); for (int i = 0; i < 10
先に断っておきますが、拡張子xlsxであるOffice Open XML Spreadsheetです。いわゆるExcel 97-2003形式(拡張子xls)を期待された方、すみません。 ウェブブラウザ上で動作するJavaScriptでExcelブックを作るプログラムを書いてみました。 Google Chrome 10.0, Safari 5.0.4, Firefox 4.0, Firefox 3.6.16で正常に動作しました。ただし、SafariとFirefoxでは、ダウンロードのたびにファイル名を指定する設定とすることをお薦めします。そうでない場合、ファイルに拡張子が付かないです(Excelの入っていないPCではGoogle Chromeも同じ結果になるのかもしれません)。 Opera 11.01では、期待通りのファイルが生成されず、Excelで開こうとすると「修復しますか?」と聞かれて
ニコニコ実況SDKがリリースされたそうです。 実は、以前にニコニコ実況のコメントを取得して表示するプログラムを書いたのですが、これでおそらくお蔵入りになると思います。SDKをダウンロードしておらず、中身は詳しく知りませんがおそらくコメントの取得も可能でしょう。そのため、せめてここに記録を残しておこうと思います。 さかのぼること3–4ヶ月前、高専カンファ in 長野へとりあえず発表申込みしていたところ、ニコニコ実況が発表されました。とうとう出てきたかという思いましたが、残念な点はコメント表示とテレビ映像の表示は別ウィンドウ・別アプリケーションという仕様、これを一体化させたものを作って発表に持ち込もうと考えました。改造元はTVTestです。当時の最新版の0.6.4を使っていたと思います。 ニコニコ実況でコメントを取得するには次の手順が必要でした。 ログインコメントサーバの情報を取得コメントを取
P0288R9: move_only_functionが待ち遠しく、似たようなもの(劣化版)を自作しようかどうかよく悩んでいます。そんな折、Boost.TypeErasureで簡単に作れるのではないかと思いつき、試していました。 その結果がこれです: https://wandbox.org/permlink/GwWCWR0PtF4XXqmh #include <iostream> #include <memory> #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/builtin.hpp> #include <boost/type_erasure/callable.hpp> #include <boost/type_erasure/relaxed.hpp> template<typename T> usin
久々なので、大げさな題を付けました。 新しいWindowsでしか実行できない関数を使うときの1つの手段として、GetProcAdressがあります。C++0xのdecltypeは、そのやり方を大きく変えます。 HMODULE hmodKernel = GetModuleHandle(TEXT("kernel32")); typedef decltype(CancelSynchronousIo)* PCancelSynchronousIo; PCancelSynchronousIo pCancelSynchronousIo = reinterpret_cast<PCancelSynchronousIo>( GetProcAddress(hmodKernel, "CancelSynchronousIo")); 今までだったら、MSDNライブラリあるいはヘッダファイルを直接見るなどして、type
あえて、この前の記事と同じタイトルにしました。なぜなら、実はこの記事は途中から大幅に書き直したからです。しかも、書き直す前の記事はビジネスの視点から見ていて、書き直した後は、前の記事をご覧になっていただければわかりますが、ニコニコモンズの話になっています。どうして書き直したのかと言えば、ニコニコモンズの話をしたかったからです。それに比べれば、ビジネスの話などどうでもいいように思っていました。しかし、最近ニコニコのアクセスが減ったとかで、何か言っている人たちもいるようなので、せっかく書いた記事を公開しようと思います。 以下、書き直す前の記事全文。 久しぶりのブログ更新であり、久しぶりのニコニコ動画の話題ですが、最近の気になる動きと言えばこの3点。 「ニコニコ動画」でMADも削除 ドワンゴが権利者に申し入れ 「ニコニ・コモンズ」発表へ 「ニコ動(夏)」は7月4日に ニコニコ大会議2008 以前
山本さんの仕事は速いです。前回のミーティングでUnicode対応が欲しいという話をしたところ、導入されることになりました。しかも私はStringさえUnicodeであればというつもりでいましたが、なんと全体的に行うことになり、早速コンパイラオプションによってCharが1バイトになったり2バイトになったりする機能がもう実装されてしまいました。つまりこれからのCharはC/C++でのTCHAR/_TCHARのような存在です。従来の符号付1バイト整数型という立場は新しくSByte型を導入してその座を譲っています。 これからWindows APIの宣言を両対応にしますが、その前に頭の整理を兼ねてC/C++上でのWindows APIにおけるUnicode対応のプログラムを書く方法をここにまとめておきたいと思います。 C/C++におけるWindows APIプログラミングでは、マルチバイト文字型とし
話のネタはありながら、気が付けば木曜日となり、どうやら毎週木曜日に書くという習慣が自分の中に根付いたようです。 さて今日はC++の話です。ActiveBasicもバージョン5で色々と変わりそうですが、C++も目下新規格の制定に向けて話が進んでいます。その新規格は現在のところ、C++0xと呼ばれています。勿論200x年中の制定を見込まれているからですが、最近ではC++09という言葉もちらほら見かけ始めている気もします。 なお、そんなC++0xの様子はC++の標準化委員会のページで窺い知ることができます。 http://www.open-std.org/jtc1/sc22/wg21/ JTC1/SC22/WG21 – The C++ Standards Committee その中でも今回紹介したいのはムーブセマンティクス (move semantics)と右辺値参照 (rvalue refer
次のページ
このページを最初にブックマークしてみませんか?
『dev.activebasic.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く