【发布时间】:2012-07-02 06:15:33
【问题描述】:
我不知道我想要做的事情是否可行,但我很高兴。这将真正证明 C++ 是一门强大的语言。
所以,我有一个 DLL 和一个使用 DLL 导出的函数的 EXE。该函数接受一个参数,该参数是或必须是指向另一个函数的指针,并执行它。像这样的:
extern void RunFunction(void (*FunctionPonter)()) {
(*FunctionPonter)();
}
我这样称呼它:
RunFunction(&FunctionToExecute);
作为参数发送的函数将没有参数,只是一个 void 函数。
所以,所有这些都有效,正如这里介绍的那样。现在,我想更进一步,将(*void)() 定义为,例如Action。
typedef (*void)() Action;
Action FunctionToExecute() {
// My code. This function won't return results - void
}
我想将指针发送到我的 DLL 中的函数,如下所示:
// This is how it would be declared now in the DLL
extern void RunFunction(void (ACTION) {
(*FunctionPonter)();
}
// and this is how I would like to use it
RunFunction(FunctionToExecute);
我正在使用 VC2010,如果可能的话,我不知道该怎么做。感谢您的想法、解释和帮助!
【问题讨论】:
-
这开始很好,但后来变得完全不清楚。您希望您的第二个示例做什么,而您的第一个示例还没有做什么?
-
只是为 void (*)() 创建一个 typedef,以区别于其他未创建为作为参数发送的 void 函数。就是这样!
-
C++确实是一门强大的语言,如果要求清晰合理!
-
typedef 不是一个新类型,它只是一个别名。所以
void (*)()和Action对编译器来说是无法区分的。 -
是的,但它们帮助我了解什么是作为参数发送给其他函数的函数 - 我将它们称为 Action 函数 - 以及其他函数可以调用的简单 void 函数跨度>
标签: c++ function pointers arguments