人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelVBAについて教えてください。
VB6で作られたプログラムをExcelVBAに移植しようとしているのですが、外部APIを呼び出す際に文字列を設定するところでVB6では文字列の終端の意味の"Chr(0)"を付け足して実現しているのですが(C言語で作られたものなのでこういう仕様だというメーカーの説明)ここをExcelVBAで実現することが出来ません。文字列だけ渡したり、Chr$(0)やvbNullやvbNullCharやvbNullStringを試してみたのですが文字列の終わりを認識できていないようです。
賢者の方、お知恵をお貸しくださいませ!

●質問者: MAXPOWER
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:API C言語 vb6 プログラム メーカー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● harasima
●60ポイント

StrConv関数をかましてみてはどうでしょう?



http://www.ne.jp/asahi/hishidama/home/tech/excel/dll.html


Cだと文字列は'0x00'≒NULLが番兵となって文字列終了の目印にしています。『C言語で作られたものなのでこういう仕様』というのはそう言う意味です。

で、VBの”string”オブジェクトはUniCodeになっていて、(UniCodeで書かれたファイルなどダンプすると分かりますが)一般文字だと1文字づつ'0x00'が入って1文字しか表示されなかったり、文字化けしてしまうのかと思います。


で、上記ページのMessageBoxの例では、サブルーチンを自作してますが、StrConv 関数を使用して、UniCodeのstringオブジェクトを旧来の文字コードに変換すれば良いかと思います。

Dim ret As Integer
ret = MessageBoxPtr(0, VarPtr(text(0)), VarPtr(caption(0)), vbOKOnly)
'ret = MessageBoxPtr(0, StrPtr("message"), StrPtr("title"), vbOKOnly)

としてありますが、コメントアウトしてある場所を書き換えてそのまま(2バイト文字も)使えます。

Dim ret As Integer
ret = MessageBoxPtr(0, StrPtr(StrConv("message", vbFromUnicode)), StrPtr(StrConv("title", vbFromUnicode)), vbOKOnly)
◎質問者からの返答

ありがとうございます。

早速明日試してみます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ