タイトル : Re^7: APIの宣言方法 投稿日 : 2004/08/18(Wed) 20:01 投稿者 : よねKEN 参照先 : http://www5b.biglobe.ne.jp/~yone-ken/
> > 引数に渡したデータが破壊されてしまうようです。1回目のWritePrivateProfileString関数の > > 呼び出しで変数IniFileNameの中身が破壊され、2回目に指定するパスは異なったものになり ます。 > > #過去に別所で同様の問題があがっていたので実験したことがあります。 > > フォローありがとうございます。 > テストして見たら上記現象が確認できました。 > 私も理解不足なのですが、今回の事は、通常のAPI関数でも同様の現象はおきるのでしょうか? 以下、私の個人的な予想で、確証はまったくないです。 他のAPI関数でも同様の現象は起きると予想してます。 例えば、GetPrivateProfileString関数の第四引数lpReturnedStringは結果の文字列を 受け取る必要があり、そのためにはStringBuilderで受けないといけませんが、 VBではString型で受けられるようになっています。 .NET FrameworkのString型の仕様からこれはあり得ない動作ですので、 VBが過去のAPI呼び出しとの互換性のためにString型で受けても大丈夫なように 何か細工をしていると考えられます。 で、おそらく関数に渡した文字列を再び引き取るような動作になっていて、 このときのUNICODE←→ANSIの変換あたりで、文字切れが発生しているのかな? と想像しています。ま、あくまで想像ですけど。 |