ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Win32APIコミュのmlang

  • mixiチェック
  • このエントリーをはてなブックマークに追加
IMultiLanguage をご存知ですか?

IMultiLanguage2 以降で文字コードの自動判別が
DetectInputCodepage にて可能のようですが、
私の環境に(職場、自宅とも)
DetectInputCodepage が mlang.dll に入っていません。
(Dependency Walkeyで確認。見えないだけ?)

マシン3台にて確認

OS は3台とも WinXP pro SP2 で IE 6

開発環境は
VS.NET 2003 と VC6

SDK は
Platform SDK Februaly 2003(5.2.3790.0)
Platform SDK (3790.1830)

どれでやっても DetectInputCodepage は呼べませんorz
mlang.dll のバージョンは 6.0.2900.2530 です。

ちなみに GetCharsetInfo や ConvertStringToUnicode は
使えてます。

- 参考 -
IMultiLanguage3 *mlang;

CoCreateInstance(
 CLSID_CMultiLanguage,
 NULL,
 CLSCTX_ALL,
 IID_IMultiLanguage3,
 (LPVOID*)&mlang);

コメント(8)

もしやと思って QueryInterface してみたけど駄目でした…。
 よく分からないなりに試行錯誤してみました。とりあえず呼び出しは出来たようなので報告します。

http://khurata.dtdns.net/ml.zip
↑サンプルコードと exe ファイル

 これをコマンドライン上にてコンパイル・実行したところ、呼び出しは出来ている模様です。あとは DetectEncodingInfo の内容を読み出せば良い?と思います。

 C++ 慣れしていないのでダサいコードの上、COM 開発はほとんど経験が無いので、的はずれな事をしているかもしれませんが、とにかく呼べたので、何か参考になればと思い、報告させていただきました。

当方環境
 プラットフォーム
  Windows XP Home Edition SP1
  IE6 SP1
 開発処理系
  Borland C++ Compiler 5.5.1 for Win32
 ちなみにウチの環境では、mlang.dll をローカルドライブで検索しても出てこないのですが、これでなぜ実行出来るのかは、全くもって分かりません(汗)。
さっそく試させていただきました。
すごい!動いてます。

今から何が違うか検証して、結果を後ほど
ご報告させて頂きますね。

ありがとうございました♪
ちなみにいまさらDependency Walkerのスペルが違うことに
気づきました(恥

mlang.dll は %SystemRoot%\System32 にあると思うのですが…
ちょっと時間がかかってしまいました。
おかげさまで DetectInputCodepage は呼べるようになりました(^^

相違点です。

1.CoCreateInstance の3番目の引数

 CLSCTX_INPROC_SERVER
  ↓
 CLSCTX_ALL

 これは影響なし

2.DetectInputCodepage の最後のパラメータ
 INT *pnScores を初期化せずに渡していましたorz
 これが致命傷だったようです。
IN/OUT パラメータだったんですね。

ありがとうございましたm(__)m

…で、呼べるようになったので実験してみました。

DetectInputCodepage に各文字列を渡して
帰ってくるコードページを調べてみました。

Shift-JIS → 932
EUC-JP → 932
Unicode → 20127

肝心なところが判別できてないj(ry

ちなみにUnicodeかASCII文字列でないと S_FAILD になります。
そういう仕様なんですかね(^^;
>てるさん
 あ、確かに system32 直下にありました。なんで検索で出てこなかったんだろう・・・単に名前を打ち間違えたかもです(汗)。

 ちなみにココはとっくに見ていらっしゃるだろうと思い貼りませんでしたが、
http://msdn.microsoft.com/library/default.asp?url=/workshop/misc/mlang/reference/ifaces/imultilanguage2/detectinputcodepage.asp
ここを見ると IN とか IN/OUT は明記されているです。うーん、貼っとけばよかったですね、余計な手間かけさせてしまってすみません。

 実のところ、pnScores は、私も実験中に最後までハマってまして(苦笑)。探し出したサンプルコード見てたら 10 とか代入してたので、「適当な値でいいのかな〜」と思って適当に値を入れたら DetectInputCodepage が返ってこない・・・(汗)。
 で、さっきの MSDN をよく読んだら、DetectEncodingInfo 配列の個数って明記してあるし・・・(涙)。「ドキュメントはよく読め」という事ですねぇ・・・(汗)。

> ちなみにUnicodeかASCII文字列でないと S_FAILD になります。
 たぶん、Unicode を想定しているんではないかと思います。他の文字コードも判別したいなら、自力でメソッドを用意するとか・・・。
参考 → http://dobon.net/vb/melma/dotnet43.txt
ほんと「ドキュメントはよく読め」ですね。

そのドキュメント、読んではいたんですが、斜め読みしてしまって…。
khurataさんに動くサンプル頂いてから何が違うのかわからなくて、もう一回読み直してようやく気がつきました…orz

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Win32API 更新情報

Win32APIのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング