- PR -

カナ変換

投稿者投稿内容
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-05-19 09:11
ありがとうございます。

>dwSizeには必要なサイズが戻ってきていますか?
はい、一応、値は戻って来ているようですが。
dwSizeを受け取るところで
ImmGetConversionListの3番目の引数に文字列を渡しているのですが
byvalで宣言されている、引数の値が変更されてしまうのは、なぜなのでしょうか?


>あと、コードはコードタグで囲っていただけると読みやすいです。
そうか!タグで囲ってやればよかったんですね。

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-19 12:58
諸農です。

引用:

>dwSizeには必要なサイズが戻ってきていますか?
はい、一応、値は戻って来ているようですが。
dwSizeを受け取るところで
ImmGetConversionListの3番目の引数に文字列を渡しているのですが
byvalで宣言されている、引数の値が変更されてしまうのは、なぜなのでしょうか?



3番目の引数内容が変化するのは、変ですね。。

以下は、こちらでの検証内容です。
参考になりますか。

リバースする文字に「重複」を使いました。
dwSizeは68で、オフセットは36、
取得できた逆変換文字列は、
「じゅうふく」
「ちょうふく」
「しげふく」
でした。


-P.S.-
http://www.pinvoke.net のほうでImm32カテゴリを追加していただいたので、
最新版をアップしておきました。
#もちろんC#です(^_^;)


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-05-19 15:10
こんにちは

こちらでも「重複」で試してみたところ
dwSizeに96が戻ってきます。

そして、リストを取得するImmGetConversionListで
エラーが発生してしまいます。

VB.NETとC#は文法は違えど、基本的に同じ動作をすると認識していたのですが、
間違っているのでしょうか?
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-19 15:53
諸農です。

[quote]
こちらでも「重複」で試してみたところ
dwSizeに96が戻ってきます。

そして、リストを取得するImmGetConversionListで
エラーが発生してしまいます。
[/qutoe]

関数のエントリポイントを

ImmGetConversionListA

にされているようですが。。

ちなみにOSは何でしょうか?
こちらはXP PROです。

引用:

VB.NETとC#は文法は違えど、基本的に同じ動作をすると認識していたのですが、
間違っているのでしょうか?



同じ動作をすると思います。
あ、でも、それは同じ動作をするように書けば、ですが(^^ゞ



_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-05-19 15:55 ]
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-05-19 16:05
>関数のエントリポイントを
>
>ImmGetConversionListA
>
>にされているようですが。。
ImmGetConversionListWでも試してみましたが、だめでした。

>ちなみにOSは何でしょうか?
>こちらはXP PROです。
こちらはWin2000Proです。


文字列がUnicodeとか、文字列終端の違いとかですかね。

※そちらでも、3番目の引数が変更されてしまう現象はでますか?

では。
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-05-19 16:09
ごめんなさい。
前のスレッドの、「※」以降は勘違いです。

諸農さんのほうでもVB.NETの環境で試されたのかと思いました。
その前のスレッドの前半部分(僕の書き込みの引用を諸農さんの文かと勘違い)

すいません。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-19 16:32
諸農です。

引用:

ImmGetConversionListWでも試してみましたが、だめでした。



ただの「ImmGetConversionList」ではどうでしょうか?

引用:

>ちなみにOSは何でしょうか?
>こちらはXP PROです。
こちらはWin2000Proです。



変ですね。。
元々のコードはWin2000で作ったんです。
今日はたまたまXP PROを使っているんで。。

引用:

文字列がUnicodeとか、文字列終端の違いとかですかね。


現象からすると、そのあたりとは考えにくいような。

あらためて、最初にアップされていたコードを見てみました。
コード:
Public Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hkl As IntPtr, ByVal himc As IntPtr, ByVal lpsz As String, ByRef lpCandidateList As IntPtr, ByVal dwBufLen As Integer, ByVal uFlag As Integer) As Integer 



の、宣言なんですが、ByRef lpCandidateList As IntPtr のところで、
ポインタを参照で渡しているのが私のコードとの差異かな。。。

引用:

※そちらでも、3番目の引数が変更されてしまう現象はでますか?



それは発生しませんね。。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-05-19 16:49
成功しました。

以下の3点の変更で実現できました。
1.ImmGetConvertListAを使用
2.ImmGetConvertListAの引数をすべて値渡しに変更
3.ImmGetConvertListの3番目の引数をバイト配列とし、
  シフトJISのバイトコードに変換した後で処理する。

まだ、これがWIN98で動作するかどうかは分かりませんが。。。

スキルアップ/キャリアアップ(JOB@IT)