掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++、VB、VBA共通DLLを作成するには?〜その2〜 (ID:68074)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Blueさん、シャノンさん、いつもありがとうございます!! >Blueさん そうだったんですね。 確かに Declare Sub・・・ DllFunk(ByVal a As String, ByRef b As String) →Declare Sub・・・ DllFunk(ByVal a As Long, ByRef b As String) とし、 Call DllFunk(String1, String2, ReturnCode) →Call DllFunk(StrPtr(String1), String2, ReturnCode) としたら、DLL内のでバック用メッセージボックスの方は正しく文字を受け取 ることができました。 ただ、2つめの引数は、DLL側ではBSTR型のポインタにしており、DLL内で処理 した文字列をアプリ側に返すための変数なのですが・・・ こちらも何か工夫をしなければならないのでしょうか? (DLL側の引数をLPCSTR *にする?、VBA側でStrPtrと逆の処理をする??) VBA側で、戻ってきた変数をStrConvで変換してみたのですがうまく行かず・・・ >シャノンさん 初めてVB、VC++共通のDLLを作成しようとしたとき、 http://m--takahashi.com/bbs/pastlog/08600/08523.html 等を見て、「VC++でVBでも使えるDLLを作成するには文字列はBSTR型を使わな いとダメなんだ・・・Unicodeじゃ内と行けないって事なんだな〜」と思い込 んでしまっていました。 で、DLLは作成したものの、VBやVBAでは動作確認をしておらず・・・。 どうにでもなるんですね。 ちなみに、LPCSTR はchar *、LPCWSTRは WCHAR *とほぼ同等ですよね? 一度、DLLの関数を void DllFunk(char *Input, char **Output) としてみたのですが、いったん*Outputを初期化してから必要領域を確保しよ うと if(*Output != NULL) { delete[] *Output; *Output = NULL; } としていたのですが、どうやらここで処理がおかしくなっているらしく、VBA 側からは完全に応答がなくなる、という現象が発生しました。 BSTRを使っていると問題なくいけているのですが(SysFreeString関数)・・・ 恥ずかしながら、自作の関数などでLPCSTR、LPCWSTR等を使ったことがなく、 char *、WCHAR *しかほぼ経験がなくて・・・ 何か特殊な扱い方があるのでしょうか? 長々とすみません・・・ よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.