gpt4 book ai didi

c# - 回调函数在构建和 DLL 时有何用处

转载 作者:行者123 更新时间:2023-11-28 01:10:34 32 4
gpt4 key购买 nike

回调函数是否等同于 C#(.NET) 中的事件。

我对回调函数的理解是,它是通过引用该函数调用的函数。

示例代码为:

void cbfunc()

{
printf("called");
}

int main ()

{

void (*callback)(void);

callback=(void *)cbfunc;

callback();

return 0;

现在我不明白的是,从 DLL 到客户端的通知如何完整使用。

假设当我在我的 DLL 方法 2() 上收到数据时,我想执行一些方法 1()。

与 .NET 中的事件进行任何比较都会大有帮助。

最佳答案

回调和接口(interface)类是管理代码边界的好方法。它们有助于在您的代码中创建正式的边界和/或层,而不是将所有内容混为一谈。在处理大型软件解决方案时,这变得很有必要。

以下是如何使用回调和接口(interface)类的示例。在库/dll 代码中,唯一应该向主要可执行文件公开的是 myddl_interface 类和函数 getMyDllInterface()。使用这样的接口(interface)类完全隐藏了主要可执行文件的实现细节。接口(interface)类还允许主可执行文件向其注册一个稍后将执行的函数(即回调)。

// Begin library/dll Public Interface used by an executable
class mydll_interface {
public:
typedef void (*callback_func_t)();
public:
virtual void do_something() = 0;
virtual void registerFunction( callback_func_t ) = 0;
};

static mydll_interface* getMyDllInterface();

// End library/dll Public Interface used by an executable

// Begin library/dll Private implementation
class mydll_implementation : public mydll_interface {
public:
void do_something() {
printf("Hello World\n");
_callback_func();
}
void registerFunction( callback_func_t c) {
_callback_func = c;
}
private:
callback_func_t _callback_func;
};

static mydll_interface* getMyDllInterface() {
return new mydll_implementation();
};
// End library/dll Private implementation

// Begin main executable code
void myMainAppFunc() {
printf("hello World Again\n");
}

int main() {
mydll_interface* iface = getMyDllInterface();
iface->registerFunction(&myMainAppFunc);
iface->do_something();
};
// End main executable code

关于c# - 回调函数在构建和 DLL 时有何用处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616007/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com