Здравствуйте, Dimas, Вы писали:
D> typedef BOOL (*TRIOCMD)(DWORD a,void* b=NULL, void* c=NULL);
D> Весь прикол в том что в VC.NET все нормально, компилируется и D> работает, а в VC.NET 2003 выдает следующее: D> error C2383: 'TRIOCMD' : default-arguments are not allowed on this symbol
Правильно говорит: стандарт не разрешает задавать аргументы по умолчанию в typedef.
D> постоянно заполнять все аргументы функции D> дело не веселое (оно бывает нужно 1 раз из 20).
Если это так существенно, не используй указатели на функцию "в голом виде", а предоставь
для них "обертки" с нужными свойствами (код не компилировался, может содержать неточности):
class TRIOCMD_t
{
private:
typedef BOOL Fun(DWORD a, void* b, void* c);
public:
TRIOCMD_t(HMODULE dll, LPCSTR name)
: m_f ((Fun*)GetProcAddress(dll, name))
{
if (!m_f)
throw std::runtime_error("Can not find requested function in the DLL provided.");
}
BOOL operator()(DWORD a, void* b = NULL, void* c = NULL)
{
return (*m_f)(a, b, c);
}
private:
Fun* m_f;
};
...
TRIOCMD_t TRIOCMD (dll, "TRIOCMD");
TRIOCMD(10);
Или еще что-нибудь в таком роде.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Есть: DLL экспортируемая функции.
Клиент — импортирует их
Загрузка DLL через LoadLibrary, функции через GetProcAddress
Определен тип typedef BOOL (*TRIOCMD)(DWORD a,void* b=NULL, void* c=NULL);
Весь прикол в том что в VC.NET все нормально, компилируется и работает, а в VC.NET 2003 выдает следующее: error C2383: 'TRIOCMD' : default-arguments are not allowed on this symbol
Может кто сталкивался с подобным, или у кого есть мысли по этому поводу HELP ME PLEASE. А то постоянно заполнять все аргументы функции дело не веселое (оно бывает нужно 1 раз из 20).
ПК>Правильно говорит: стандарт не разрешает задавать аргументы по умолчанию в typedef.
Получается, что компиляторы MS до 2003 просто "глотали" аргументы по умолчанию в typedef, а в 2003 у них совесть проснулась, решили по стандарту . Ладно это я так от горя, что решение проблемы оказлось гораздо проще чем я думал .
Есть по этому поводу другой вопрос: Как можно написать обертку, чтобы ее могли использовать под другие сишные компиляторы под Windows (Напр: Builder)? Я имею ввиду что написать одну обертку, а она подходит под несколько компиляторов или я много кушаю (в смысле зажрался ) и нужно писать отдельную обертку под каждый компилер?
Ну вобщем-то есть у вас на примете ссылки где я могу это почитать ? Если есть напишите пожалуйста, если нет, то нет, буду мыслить
Здравствуйте, Dimas, Вы писали:
D> Получается, что компиляторы MS до 2003 просто "глотали" аргументы по D> умолчанию в typedef, а в 2003 у них совесть проснулась, решили по стандарту
Приблизительно так Главное — урок об использовании нестандартных расширений компилятора
D> Как можно написать обертку, чтобы ее могли использовать под другие сишные компиляторы D> под Windows (Напр: Builder)?
Предложенный вариант (вернее, его общие очертания) должен "нравиться" любому, даже
далеко не самому новому компилятору C++.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен