我已经在我的托管 C++ 文件中使用 Boost::Signal 和 Boost::Bind 实现了事件处理。参考链接:Boost::bind
此外,我还在本机 C++ 文件中创建了函数指针,该函数指针作为托管代码中的 EventHandler 传递给我的 boost::Signal.Connect()。在我的 Native C++ 中作为函数指针传递的函数代码
std::string NativeCplus::AddFunctionPointer( std::string message )
{
return message;
}
以上函数作为 boost::function 对象在另一个函数 NameChangeEvent() 中传递,如下所示:
void NativeCplus::NameChangeEvent()
{
UnmanagedNameEvent* unmanagedNameEvent=new UnmanagedNameEvent();
boost::function<std::string (std::string)> f;
f=std::bind1st(std::mem_fun(&AlgebraAPI::AddFunctionPointer),this);//FunctionPointer
std::string name="abcd";
unmanagedNameEvent->AddEvent(f,name);
}
在上面的代码中,我采用了 boost::function 并将函数指针转换为 boost::function (f)。(我说得对吗?)。然后行 unmanagedNameEvent->AddEvent(f,name ) 其中boost::function(f)被传递给AddEvent(f,name)并且这个AddEvent(f,name)在我的托管 C++ 代码文件中实现。下面是我在本地 c++ 项目中引用的托管 C++ 代码:
//在我的 c++/CLI Wrapper.cpp
declspec(dllexport) void UnmanagedNameEvent::AddEvent(boost::function<std::string (std::string)> f,std::string name)
{
UnmanagedNameEvent* unmanagedNameEvent=new UnmanagedNameEvent();
unmanagedNameEvent->signalEventMessage.connect(f);
//which should be like this.. unmanagedNameEvent->signalEventMessage.connect(bind(NativeCplus::f));
}
问题是我不能使用 NativeCplus 类来引用它的非托管函数(ief),因为这将创建一个 dll 文件的循环依赖关系。任何解决方法?所有的耳朵任何更短的解决方案!