【发布时间】:2015-06-28 10:52:31
【问题描述】:
我正在使用 ACE 从动态加载的 DLL 中获取函数。下面的函数 symbol() 返回一个 void 指针,我必须将它转换回原来的样子。
typedef cBase * (_cdecl *typeCreateManager)( void );
// ...
ACE_DLL * m_pAceDll = new ACE_DLL;
m_pAceDll->open( "NameOfDll.dll" );
cBase * (_cdecl *pfunc)( void ); // declaration of function pointer
// can be replaced by "typeCreateManager pfunc;"
pfunc = (typeCreateManager)m_pAceDll->symbol("?createManager@@YAPAVcBase@@XZ");
// can be replaced by ???
cBase * pObject = (*pfunc)();
m_pAceDll->close();
两个问题:
哪种 C++ 类型转换适合代替 C 类类型转换?静态还是重新解释?
我可以在演员表中省略 typedef 吗?什么是正确的语法?我不希望它在使用我的 DLL 的任何地方都可见。由于我只在代码中的少数地方需要它,我想删除 typedef。
【问题讨论】:
-
关于第 2 点并保持 C 风格,我会假设
(cBase * (_cdecl (*))( void ))或只是(cBase * (_cdecl *)( void ))。
标签: c++ casting function-pointers typedef ace