非実在ファイルをエクスプローラにD&Dする
自アプリからエクスプローラへのドラッグ&ドロップにおいて、ファイルシステムやシェル名前空間上に存在しないデータをやりとりする方法があります。それがCFSTR_FILECONTENTSとCFSTR_FILEDESCRIPTORの組み合わせです。ともにMSDNライブラリのShell Clipboard Formats...
View Article非同期ドラッグ&ドロップ
今回は非同期でドラッグ&ドロップ処理を実行させる方法です。コード上は前回(非実在ファイルをエクスプローラにD&Dする)の続きになります。通常、ドロップ(IDataObject::GetDataの呼び出し)が行われるのはDoDragDrop関数から返ってくる前です。一方、非同期なドロップではDoDragDropから返ってきた後にドロップ処理が行われるようになります。以下がコードです。前回のコー...
View ArticleOSの名前を取得する
正確には、Linuxディストリビューションの名前(可能ならバージョンも)を取得したい(ただしLinux以外も一応想定しておく)という話です。lsb_releaseやuname -oなどを使って収集するコードを書いてみました。厳密さはあまり考えないものとしています。コードはGistに置きました:...
View ArticleFirefox拡張を作り始めてみた(シプキャン)
去る8月17日、私立・プログラミングキャンプ 2014 東京大会に参加していました。そのときのLT発表で使ったスライド(若干修正あり)です。このスライドはCC BY-SA 4.0でのライセンスです。日中のハッカソンタイムはこれ作っていました。いい機会なので、なかなかやらないようなことに手を付けてみたわけです。ソースコードはegtra/dframe-for-firefox...
View Article.NETでのRegFree-COM
.NETアセンブリによるCOMサーバーでもマニフェストによるRegFree-COMが可能なことを知ったので、試してみました。さらに、CLR 4(.NET Framework 4~4.5)、CLR 2(.NET Framework 2.0~3.5)の両方で動くようにする方法を調べました。まずはCOMサーバー側、C#です。// t.cs using System; using...
View Articleアラインメント保証付きmake_sharedを作った
今日も配列版make_sharedの話です。指定のアライメントに沿った領域を確保するものを作ってみました。経緯はこうです。手元に、可変長の領域を確保する目的でboost::shared_array<char> p(new...
View ArticleWindows Animation Managerを使ってみた
近頃のWindowsには、Windows Animation Managerというアニメーション支援のライブラリが搭載されています(MSDNライブラリ:Windows Animation API の概要)。これを試しに使ってみました。 Windows Animation Managerの概要Windows Animation...
View Articleスレッド初期化・終了関数のまとめ
本記事は、COM Advent Calendar 2014 – Qiitaの2日目の記事です。COMを使用するスレッドでは、CoInitializeEx/CoUninitializeなどを呼ばなければならないのはご存じと思います。実は結構種類があるので、その一覧をまとめてみようと思い立ちました。CoInitialize, CoInitializeEx /...
View ArticleISequentialStreamがQIできない
本記事は、COM Advent Calendar 2014 – Qiitaの4日目の記事です。時空が歪んでいます。ISequentialStreamをQueryInterfaceするこんな関数を作ったことがあります。#include <comdef.h> ISequentialStreamPtr QuerySequentialStream(IUnknown* u) {...
View ArticleQueryInterfaceで増えるオブジェクト
本記事は、COM Advent Calendar 2014 – Qiitaの6日目の記事です。時空が歪んでいます。MSXMLのDOMDocumentクラスのオブジェクトは、QueryInterfaceでIStreamを要求すると面白い挙動を示します。#include <iostream> #include <windows.h> #include...
View ArticleQueryInterfaceで増えるオブジェクト (2)
本記事は、COM Advent Calendar 2014 – Qiitaの7日目の記事です。前回(QueryInterfaceで増えるオブジェクト)の続きです。DOMDocumentからQueryInterfaceで2つのIStreamを取り出したときの動きを見てみます。IStream.Readを呼び出してみて、IStream同士は独立して取り扱えるらしいことを確かめてみます。#include...
View ArticleQueryInterfaceで増えるオブジェクト (3)
本記事は、COM Advent Calendar 2014 – Qiitaの8日目の記事です。QueryInterfaceで増えるオブジェクト...
View ArticleCOMにおけるアパートメントの概要
本記事は、本記事は、COM Advent Calendar 2014 – Qiitaの10日目の記事です。10日でした。今後、COM Advent Calendarでアパートメント間のマーシャリングの話をしたいので、今日は駆け足でアパートメントの説明をします。...
View Article