Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов указателя на виртуальную функцию, Правильный способ 
:(
    Опции темы
volatile
Дата 16.10.2015, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Proxin, если нигде ничего не выставлять (я имею в виду соглашения о вызове), то всё будет работать.

Цитата(Proxin @  16.10.2015,  09:48 Найти цитируемый пост)
А из-за чего у меня возникает ошибка при cdecl и функции с воообще не определённым числом параметров

Вангую что у вас ваша dll экспортируется как _stdcall


Это сообщение отредактировал(а) volatile - 16.10.2015, 10:58
PM MAIL   Вверх
Proxin
Дата 16.10.2015, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: нет
Всего: 3



нет, в code generation на вкладке c/c++ у меня стоит __cdecl в calling convention ( во всех проектах ). или это не там?

Это сообщение отредактировал(а) Proxin - 16.10.2015, 12:21
PM MAIL   Вверх
volatile
Дата 16.10.2015, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Proxin, а как вы экспортируете то?
что-то я не вижу в упор где у вас идет экспорт.

Добавлено через 8 минут и 12 секунд
надеюсь используется тот-же компилятор для dll, и для eхe ?

и напишите конкретно
код длл
Код

... 


код exe
Код

... 



PM MAIL   Вверх
feodorv
Дата 16.10.2015, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



 smile C++ очень бережно относится к преобразованию типов, вообще не понятно, как у Вас вот это сработало:
Цитата(Proxin @  15.10.2015,  16:22 Найти цитируемый пост)
   cfnc    vfnc = &A::a;
Компилятор просто верещит, что нужен reinterpret_cast...


Здесь Вы ступаете на крайне тонкий лёд. Указатели на методы класса не равны простому указателю на свободную функцию. Но вот это работает:
Код
#include <iostream>

class A {
  public:
    virtual int _cdecl f(int c);
};

int A::f( int c )
{
  return c;
}

typedef int (_cdecl A::*vf)(...);

int main()
{
  A* a = new A();
  vf ff = reinterpret_cast<vf>(&A::f);
  std::cout << (a->*ff)(2) << std::endl;
  return 0;
}




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Proxin
Дата 18.10.2015, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: нет
Всего: 3



Спасибо, получилось с reinterpret_cast, всё работет, как надо. И статья по хранению указателей оказалась очень полезной.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.