アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもこの教えてgooで回答してくださってる方々にはお世話になってます。
前の質問でVCで作成したdllをvbから呼び出して
文字列を渡して返すということを教えて頂いたのですが
その件に関連して質問があります。

eucをsjisに変換する自作の
dllを使用しているのですが、問題が発生しました。
それは一部、漢字が正確に変換できないのです。
(ちなみにCから呼び出す分には問題は発生しません。)
例えば「これは全角です。」をeuc→sjisは問題ありません。
問題がでるのはある特定漢字コード、具体的には「野」です。
EUCでの「野」の漢字コードはCCEEかと思いますが
open~input文で読みとったところCCFBになってしまいます。
これは何故なのでしょうか?

またvbのstring型をbyrefで渡したときどの部分に
文字列長の情報が入ってるのでしょうか?184バイト目以降から
2バイト置きに渡した文字列が入っていましたが
それ以前の情報は何が何を表しているのかまったくわかりませんでした。
どうかご教授お願いします。

A 回答 (2件)

eucのファイルをテキストモードで読み込んでいませんか?


テキストモードでは、SJISしか扱えません。

Binaryでオープンし、Byte型配列に読み込む必要があります。


あと、下の方なのですが、MSDNでBSTR型について調べてみてください。
    • good
    • 0
この回答へのお礼

byte型でロードすればうまくいきました。
ご指摘ありがとうございました。

ただbstrについてかなり複雑なようで
よく理解できませんでした。

お礼日時:2002/06/01 16:31

VBの文字列をByRefで渡したときは、長さの情報から渡されるわけではありません。


文字列の領域のアドレスを示す変数のアドレスを渡しているのです。
つまりLPSTR* = char**を渡していることになります。
じっさいには、VBではUNICODEが使われているので、関数を呼び出す前にVBがかってに変換し、一時的なバッファのを確保し、そのアドレスを格納した変数のアドレスが渡されることになります。

EUCのほうについては、ちょっとわかりません。
    • good
    • 0
この回答へのお礼

レスありがとうございます。大変参考になります。
byrefで渡した値をよみとっていっても
文字列は返ってこないのですね。
184バイト目に文字列がみつかったのは単なる偶然のようでした。
もう少し勉強してみます。

お礼日時:2002/06/02 01:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!