いつもこの教えてgooで回答してくださってる方々にはお世話になってます。
前の質問でVCで作成したdllをvbから呼び出して
文字列を渡して返すということを教えて頂いたのですが
その件に関連して質問があります。
eucをsjisに変換する自作の
dllを使用しているのですが、問題が発生しました。
それは一部、漢字が正確に変換できないのです。
(ちなみにCから呼び出す分には問題は発生しません。)
例えば「これは全角です。」をeuc→sjisは問題ありません。
問題がでるのはある特定漢字コード、具体的には「野」です。
EUCでの「野」の漢字コードはCCEEかと思いますが
open~input文で読みとったところCCFBになってしまいます。
これは何故なのでしょうか?
またvbのstring型をbyrefで渡したときどの部分に
文字列長の情報が入ってるのでしょうか?184バイト目以降から
2バイト置きに渡した文字列が入っていましたが
それ以前の情報は何が何を表しているのかまったくわかりませんでした。
どうかご教授お願いします。
No.1ベストアンサー
- 回答日時:
eucのファイルをテキストモードで読み込んでいませんか?
テキストモードでは、SJISしか扱えません。
Binaryでオープンし、Byte型配列に読み込む必要があります。
あと、下の方なのですが、MSDNでBSTR型について調べてみてください。
byte型でロードすればうまくいきました。
ご指摘ありがとうございました。
ただbstrについてかなり複雑なようで
よく理解できませんでした。
No.2
- 回答日時:
VBの文字列をByRefで渡したときは、長さの情報から渡されるわけではありません。
文字列の領域のアドレスを示す変数のアドレスを渡しているのです。
つまりLPSTR* = char**を渡していることになります。
じっさいには、VBではUNICODEが使われているので、関数を呼び出す前にVBがかってに変換し、一時的なバッファのを確保し、そのアドレスを格納した変数のアドレスが渡されることになります。
EUCのほうについては、ちょっとわかりません。
レスありがとうございます。大変参考になります。
byrefで渡した値をよみとっていっても
文字列は返ってこないのですね。
184バイト目に文字列がみつかったのは単なる偶然のようでした。
もう少し勉強してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
CString ←→ BSTRの変換について
-
数字5桁文字コード?
-
RubyでUTF8のコード値を文字に...
-
EBCDICをASCIIに変換したい
-
VS 2008(VB.NET)
-
EBCDICへの変換
-
漢字の振り仮名を取得したい
-
VBでバイナリデータについて。
-
英数字を含む文字列(0-9,A-Z)...
-
PowerpointVBAでスライドに貼っ...
-
バイナリデータ→ASCII 変換プ...
-
VHDL について。7セグメントL...
-
1をA、2をB・・・に変換したい
-
latin-1 (ISO-8859-1)への変換
-
JIS → S-JIS コード変換するには
-
%fと%gについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
ExcelVBA実行後に時々落ちる
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
ふりがなをアルファベット化す...
-
英数字を含む文字列(0-9,A-Z)...
-
VS 2008(VB.NET)
-
Symfowareでのデータ型変換につ...
-
S-JIS → JIS コード変換するには
-
CString ←→ BSTRの変換について
-
数字5桁文字コード?
-
10進数→2進数への変換
-
2バイト文字をJEFからSJISに変...
-
JIS → S-JIS コード変換するには
-
EBCDICへの変換
-
RubyでUTF8のコード値を文字に...
-
latin-1 (ISO-8859-1)への変換
おすすめ情報