Моя идея - проверить, нужна ли этой DLL версия, которая мне нужна, или она старше или новее? Я пытаюсь использовать функцию THUNK/Trampoline.Неверное преобразование gcc -fpermissive
здесь мое использование в другом файле * .dll.
int FilterVersion(CBaseFilter* pFilter)
{
//this is line 178
void* ProgVersion = (CBaseFilter::AbstractProgVersion)(void *)&CBaseFilter::FilterVersionStatic;
return (*(CBaseFilter::AbstractProgVersion)ProgVersion)(*pFilter);
}
Это объявление класса, в котором я объявил батут.
class PROG_CORE_API CBaseFilter
{
friend class CProgEngineInternal;
// Trampoline Design pattern
// this FilterVersion function will be used on a global function exported from a
// cpp file exporting the dlls functions (therfore must be: static = global).
// it will use an arbitrary BaseFilter object - so Pure abstract function will
// make it possible to use polimorphism to all types of derived classes objects.
public:
typedef int (*AbstractProgVersion)(CBaseFilter&);
virtual int FilterVersionAbs() =0 ;
// a single spot (static) where all derived implemented filters versions tested.
// developer can specify version numbers to prohibit from running
// returning 0 should block the filter from loading.
static int FilterVersionStatic(CBaseFilter& FilterObj)
{
// version is 4 bytes
return FilterObj.FilterVersionAbs();
}
mutable int m_Version;
private:.....
Предупреждение я получаю:
GCC Build Error in - AddBorders_F.cpp:178:76: error: invalid conversion from ‘CBaseFilter::AbstractProgVersion {aka int (*)(CBaseFilter&)}’ to ‘void*’ [-fpermissive]
GCC Build Error in - AddBorders_F.o] Error 1
GCC Build Error in - make: *** [AddBorders] Error 2
, насколько мой поиск идет я понимаю, я не хватает кастинг на, но я не понимаю, почему?
Где линия 178? – ldrumm
Первая строка здесь - мое использование void * ProgVersion = (CBaseFilter :: AbstractProgVersion) (void *) & CBaseFilter :: FilterVersionStatic; – Gilad
Это поможет добавить комментарий к соответствующей строке исходного кода, чтобы показать, какая строка 178. Вы должны изменить свой вопрос, чтобы показать это. – ldrumm