- ベストアンサー
dllを使用しVB側に文字列を返す3
いつもこの教えてgooで回答してくださってる方々にはお世話になってます。 前の質問でVCで作成したdllをvbから呼び出して 文字列を渡して返すということを教えて頂いたのですが その件に関連して質問があります。 eucをsjisに変換する自作の dllを使用しているのですが、問題が発生しました。 それは一部、漢字が正確に変換できないのです。 (ちなみにCから呼び出す分には問題は発生しません。) 例えば「これは全角です。」をeuc→sjisは問題ありません。 問題がでるのはある特定漢字コード、具体的には「野」です。 EUCでの「野」の漢字コードはCCEEかと思いますが open~input文で読みとったところCCFBになってしまいます。 これは何故なのでしょうか? またvbのstring型をbyrefで渡したときどの部分に 文字列長の情報が入ってるのでしょうか?184バイト目以降から 2バイト置きに渡した文字列が入っていましたが それ以前の情報は何が何を表しているのかまったくわかりませんでした。 どうかご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
eucのファイルをテキストモードで読み込んでいませんか? テキストモードでは、SJISしか扱えません。 Binaryでオープンし、Byte型配列に読み込む必要があります。 あと、下の方なのですが、MSDNでBSTR型について調べてみてください。
その他の回答 (1)
- haporun
- ベストアンサー率40% (230/562)
VBの文字列をByRefで渡したときは、長さの情報から渡されるわけではありません。 文字列の領域のアドレスを示す変数のアドレスを渡しているのです。 つまりLPSTR* = char**を渡していることになります。 じっさいには、VBではUNICODEが使われているので、関数を呼び出す前にVBがかってに変換し、一時的なバッファのを確保し、そのアドレスを格納した変数のアドレスが渡されることになります。 EUCのほうについては、ちょっとわかりません。
お礼
レスありがとうございます。大変参考になります。 byrefで渡した値をよみとっていっても 文字列は返ってこないのですね。 184バイト目に文字列がみつかったのは単なる偶然のようでした。 もう少し勉強してみます。
お礼
byte型でロードすればうまくいきました。 ご指摘ありがとうございました。 ただbstrについてかなり複雑なようで よく理解できませんでした。