初めて投稿させて頂きます。
現在VCで作成したDLLからVBで作成したある関数を実行させたいと考えています。
VBから関数ポインタを取得するにはAddressOf演算子があることまでは分かっています。
問題は、VC側からどうやってそのアドレスを取得し、指定された関数を実行するのかが分からなくて困っています。
ご存知の方がおられましたらご教授ください。よろしくお願いします。
普通に関数ポインタとして受け取って呼び出せばよいだけですが……。
関数ポインタがわからない,というのであれば,
Cの勉強が不足しているのでしょう。
初心者ですみません。
取り敢えず簡潔に
#include <windows.h>
typedef void (*pfunc)(int);
pfunc *f;
void test(pfunc *addr)
{
*f = *addr;
(*f)((int)5);
}
だと、引数に5を指定して、addrの関数が呼び出されますよね。
どうも、VB上で実行すると落ちるのですが…
すみません。
f = addr;
でした。
メッセージボックスで確認したところ
5が表示されました。
しかし、メッセージ表示後、落ちてしまいます。
後処理がいるのでしょうか?
VBはstdcall規約を使っているので,
/Gzコンパイラオプションで指定するか,
__stdcallを関数ポインタ及びDLL関数に設定しておく必要があります。
YuOさん、こんな初歩的な質問にご丁寧に回答していただき有難う御座いました。
お蔭様で、無事解決することが出来ました。
大変勉強になりました。本当に有難う御座いました。
また何かあったらよろしくお願いします。
ツイート | ![]() |