VC++ではなくC++の質問です。(すみません。。)
サービス管理用のクラスを作成しています。そのクラスで以下のような処理を行っているのですが、関数アドレスを指定する箇所でコンパイルエラーが出てしまいます。
void CWinService::StartMyServiceCtrlDispatcher(LPCTSTR lpServiceName)
{
SERVICE_TABLE_ENTRY ent;
ent.lpServiceName=(LPSTR)lpServiceName;
/* ↓ここの指定で staticのメンバ関数にしないとコンパイルエラーになる */
ent.lpServiceProc=CWinService::ServiceMain;
StartServiceCtrlDispatcher (&ent);
}
void WINAPI CWinService::ServiceMain(DWORD ac, char **av){/* 割愛 */}
できれば、コンパイルエラーが出ているメンバは、virtualで指定したいのですが、static 指定じゃなければメンバ関数アドレスの取得はできないのでしょうか。
基礎的なところで申し訳ないのですが、よろしくお願いします。
// ヒント: static関数からメンバ関数を呼べばいい。
#include <iostream> // cout, endl
class foo {
int value;
void f(int arg) { std::cout << "foo(" << value << ")::f(" << arg << ")\n"; }
static void g(foo* self, int arg) { self->f(arg); }
public:
foo(int v) : value(v) {}
void run(int arg) { g(this,arg); }
};
int main() {
foo f(123);
f.run(456);
}
解決しました。
わかりにくい文章に回答いただき、大変感謝です。
ありがとうございました。
ツイート | ![]() |