« [日記] クイニーアマン | トップページ | [英語] わからなくても聴いているだけで雰囲気が楽しいネズミの編集長の冒険物語 »

2008年10月12日 (日)

[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分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] Win32OLEとCP51932:

« [日記] クイニーアマン | トップページ | [英語] わからなくても聴いているだけで雰囲気が楽しいネズミの編集長の冒険物語 »