[Ruby] Win32OLEとCP51932
ちょっと行き詰まったので、IMultiLanguage2 インターフェースを利用して51932を扱ってみようと思い試してみた。
IMultiLanguage2 *pIMultiLanguage = NULL;
HRESULT hr = CoCreateInstance(&CLSID_CMultiLanguage,
NULL,
CLSCTX_INPROC_SERVER,
&IID_IMultiLanguage2,
(void**)&pIMultiLanguage);
テストで書いたCのプログラムでVC2005だとうまいこと変換できているっぽい。 それではと、Cygwinで試すと
undefined reference to `_IID_IMultiLanguage2'
リンクエラーである。 IID_IMultiLanguage2ってあるのかと思って、nmで調べてみると
# nm /usr/lib/w32api/lib*.a | grep IID_IMulti
00001300 R _IID_IMultiMediaStream
えー。ないのかあ。 mlang.hには
EXTERN_C const IID IID_IMultiLanguage2;
とあるのに。さて、どうしたもんか。
| 固定リンク
この記事へのコメントは終了しました。
コメント
直接
#if defined(__cygwin) // 嘘かも
const IID IID_IMultiLangauge2 = {0xDCCFC164, 0x2B38, 0x11d2, {0xB7, 0xEC, 0x00, 0xC0, 0x4F, 0x8F, 0x5D, 0x9A}};
#endif
したらどうです?
投稿: arton | 2008年10月12日 (日) 22時03分
あるいは、MLang.dllから自分でcygwin用のアーカイブ(*.a)を抽出するとか。方法は知りませんが。
投稿: arton | 2008年10月12日 (日) 22時05分
ありがとうございます。
直接定義したらOKでした。
確か、cygwinのツールで dll からアーカイブを抽出できたと思うのですが、
やり方を忘れてしまったので自分で*.aを作る方は試してません。
投稿: suke | 2008年10月13日 (月) 09時07分