関数ポインタ

解決


ちぃ  2004-03-01 06:11:16  No: 53225

初めて投稿させて頂きます。
現在VCで作成したDLLからVBで作成したある関数を実行させたいと考えています。
VBから関数ポインタを取得するにはAddressOf演算子があることまでは分かっています。
問題は、VC側からどうやってそのアドレスを取得し、指定された関数を実行するのかが分からなくて困っています。
ご存知の方がおられましたらご教授ください。よろしくお願いします。


YuO  2004-03-01 07:18:05  No: 53226

普通に関数ポインタとして受け取って呼び出せばよいだけですが……。

関数ポインタがわからない,というのであれば,
Cの勉強が不足しているのでしょう。


ちぃ  2004-03-01 08:30:48  No: 53227

初心者ですみません。
取り敢えず簡潔に

#include <windows.h>
typedef void (*pfunc)(int);
pfunc *f;
void test(pfunc *addr)
{
    *f = *addr;
    (*f)((int)5);
}

だと、引数に5を指定して、addrの関数が呼び出されますよね。
どうも、VB上で実行すると落ちるのですが…


ちぃ  2004-03-01 08:34:13  No: 53228

すみません。
f = addr;
でした。
メッセージボックスで確認したところ
5が表示されました。
しかし、メッセージ表示後、落ちてしまいます。
後処理がいるのでしょうか?


YuO  2004-03-01 09:36:47  No: 53229

VBはstdcall規約を使っているので,
/Gzコンパイラオプションで指定するか,
__stdcallを関数ポインタ及びDLL関数に設定しておく必要があります。


ちぃ  2004-03-02 07:47:41  No: 53230

YuOさん、こんな初歩的な質問にご丁寧に回答していただき有難う御座いました。
お蔭様で、無事解決することが出来ました。
大変勉強になりました。本当に有難う御座いました。
また何かあったらよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加