掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++、VB、VBA共通DLLを作成するには?〜その2〜 (ID:68071)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは。 先日 http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200804/08040016.txt で質問させていただいた件の続きです。 VC++、VB、VBAから関数を呼び出せるDLLは作れました。 ただ、引数に文字列を扱おうと、VBAではうまくいかないんです(VBではまだ未確認です)。 例えば、DLLから呼び出す関数を void DllFunk(BSTR Input, BSTR *Output) { MessageBoxW(NULL, Input, L"でばっぐ", MB_OK); if(*Output != NULL)SysFreeString(*Output); *Output = SysAllocString(Input); } とし(__stdcallなどは省略しました。)、VBA側で Declare Sub・・・ DllFunk(ByVal a As String, ByRef b As String) みたいな感じで定義し、VBAでこの関数をCallしてみると、メッセージボック ス内の引数Inputの部分が文字化けしていました。 試しにDLLのBSTRをchar*にしてみると、引数としては文字化けせずに受け取れ ました。 また、DLL側の引数はBSTRのまま、VBAの関数でCallするときにStrConv関数を 使い試してみたところ、一部の文字は表示されましたが、文字化けしてしまう 文字も多々ありました(例えば"わゐうゑを" → "??う??"となります)。 やはり文字コードが違うようです。 VC++、VB、VBAで万能に使えるDLLを作成したかったのですが、DLLを作成する 際に、何かしかればならない事があるのでしょうか? それとも、各言語側で引数に入れる前に文字コードの変換などを行う用にする しかないのでしょうか? ご存じの方いらっしゃいましたら、お願いいたします。 ちなみに環境は OS:Windows XP Pro with SP2 VC++、VB:Visual Studio .NET 2005 Team Edition Access:2003 with SP3 です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.