Я использую 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.
(cBase * (_cdecl (*))( void ))
или просто(cBase * (_cdecl *)( void ))
. - person Peter - Reinstate Monica   schedule 21.04.2015