プロが教える店舗&オフィスのセキュリティ対策術

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()」の定義が違うのではないか・・・?と思っているのですが、
どの様に宣言したらよい物なのでしょうか?
もしくは、そもそも全然違う箇所を間違っているのでしょうか?

宜しくお願いします。

※ 説明の足りない箇所があれば、仰ってください。

A 回答 (1件)

http://hata.cc/docs/DLL/3.html

リテラル定数でなく、変数にしてbyval渡しにすればよいのでは。

この回答への補足

アドバイス有難うございます。

実際に作成した呼出側関数では、
それぞれを変数に格納した後、呼び出しております。

ByRef,ByValとも試してみたのですが、上手く行きませんでした。

補足日時:2006/08/02 23:35
    • good
    • 0
この回答へのお礼

おかげさまで解決致しました。

引数に関して、仰る通り「byval渡し」で解決致しました。

しかしながら、C側でvsprintfでは変数型の違いから上手く受け取れなかった様です。
(ここでおかしくなっておりました)

なので、fmtの%dやら%sやらを読み込んで、switchで型ごとにva_argで一つずつ取得することに致しました。

これは質問に書いておりませんでしたので、
分かろう筈がないですね^^;すいません。

Cの関数から呼び出した限りでは上手くいっていたので、問題ないはずと決めてかかっておりました。

ありがとうございました。

お礼日時:2006/08/06 14:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!