※ ChatGPTを利用し、要約された質問です(原文:Cで作成したDLLをVBで呼出)
Cで作成したDLLをVBで呼出
このQ&Aのポイント
Cで作成したDLLの関数をVB6.0から呼び出す方法について教えてください。
VB6.0からCで作成したDLLの関数を呼び出す際、ParamArray args()の宣言方法について教えてください。
C側とVB側の引数の定義に問題がある可能性があります。正しい引数の定義方法について教えてください。
Cで作成したDLLの関数をVB6.0から呼び出す事ができず、悩んでおります。
ご教授お願いします。
どの様な関数を呼び出そうとしているのかというと、以下の通りです。
<DLL Cで作成(コンパイラVC6)>
void WINAPI hoge(BSTR pgname,BSTR fmt,...){
~処理~
}
/* 宣言では頭にDLLExport*/
<呼出側 VB6.0で作成>
'宣言
Public Declare Function hoge Lib "hoge" _
(ByRef pgname as String , _
ByRef fmt as String , _
ParamArray args())
'呼出
call hoge("foo","baa","array1",2)
この様なコードを書いております。
C側、VB側ともに固定数の引数にしてみたところ、
通ったので「ParamArray args()」の定義が違うのではないか・・・?と思っているのですが、
どの様に宣言したらよい物なのでしょうか?
もしくは、そもそも全然違う箇所を間違っているのでしょうか?
宜しくお願いします。
※ 説明の足りない箇所があれば、仰ってください。
お礼
おかげさまで解決致しました。 引数に関して、仰る通り「byval渡し」で解決致しました。 しかしながら、C側でvsprintfでは変数型の違いから上手く受け取れなかった様です。 (ここでおかしくなっておりました) なので、fmtの%dやら%sやらを読み込んで、switchで型ごとにva_argで一つずつ取得することに致しました。 これは質問に書いておりませんでしたので、 分かろう筈がないですね^^;すいません。 Cの関数から呼び出した限りでは上手くいっていたので、問題ないはずと決めてかかっておりました。 ありがとうございました。
補足
アドバイス有難うございます。 実際に作成した呼出側関数では、 それぞれを変数に格納した後、呼び出しております。 ByRef,ByValとも試してみたのですが、上手く行きませんでした。