Re: Значения по умолчанию и VC.NET 2003
От: Павел Кузнецов  
Дата: 10.08.03 11:45
Оценка: 3 (1)
Здравствуйте, 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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Значения по умолчанию и VC.NET 2003
От: Dimas Россия  
Дата: 10.08.03 11:11
Оценка:
Привет всем!

Обьясните пожалуйста вот такой прикол:

Есть: 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).

Заранее благодарю за любую инфу.
... << RSDN@Home 1.1 beta 1 >>
166768437
Re[2]: Значения по умолчанию и VC.NET 2003
От: Dimas Россия  
Дата: 10.08.03 12:31
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:


ПК>Правильно говорит: стандарт не разрешает задавать аргументы по умолчанию в typedef.


Получается, что компиляторы MS до 2003 просто "глотали" аргументы по умолчанию в typedef, а в 2003 у них совесть проснулась, решили по стандарту . Ладно это я так от горя, что решение проблемы оказлось гораздо проще чем я думал .

Есть по этому поводу другой вопрос: Как можно написать обертку, чтобы ее могли использовать под другие сишные компиляторы под Windows (Напр: Builder)? Я имею ввиду что написать одну обертку, а она подходит под несколько компиляторов или я много кушаю (в смысле зажрался ) и нужно писать отдельную обертку под каждый компилер?
Ну вобщем-то есть у вас на примете ссылки где я могу это почитать ? Если есть напишите пожалуйста, если нет, то нет, буду мыслить
... << RSDN@Home 1.1 beta 1 >>
166768437
Re[3]: Значения по умолчанию и VC.NET 2003
От: Павел Кузнецов  
Дата: 10.08.03 13:06
Оценка:
Здравствуйте, Dimas, Вы писали:

D> Получается, что компиляторы MS до 2003 просто "глотали" аргументы по

D> умолчанию в typedef, а в 2003 у них совесть проснулась, решили по стандарту

Приблизительно так Главное — урок об использовании нестандартных расширений компилятора

D> Как можно написать обертку, чтобы ее могли использовать под другие сишные компиляторы

D> под Windows (Напр: Builder)?

Предложенный вариант (вернее, его общие очертания) должен "нравиться" любому, даже
далеко не самому новому компилятору C++.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.