Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122

Прототип функции не виден внутри класса...

05.08.2010, 10:54. Показов 2068. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую Rad Studio 2010

Для доступа к функции из DLL, описан прототип функции следующим образом:
C++
1
typedef  void (_stdcall *LPVDACQ_GETFRAMEDIM)( int*, int* );
Есть у меня класс, у которого в private секции есть объявление:
C++
1
LPVDACQ_GETFRAMEDIM  lpVDACQ_GetFrameDim;
Далее в конструкторе, я пытаюсь использовать эту функцию: пишу функцию, открываю скобку, редактор пишет мне <no parameters expected>, хотя в прототипе описано, в качестве параметров к этой функции два указателя на int. В чем может быть тут дело? Если я это же все пишу вне класса - то все прекрасно, в классе же, не работает. Может быть есть какой-то способ объявить эту функцию по-другому?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2010, 10:54
Ответы с готовыми решениями:

В какой области доступа класса разместить прототип функции?
Всем привет! Не сталкивался на знаю, разбираю код Дельфи и там встретились прототипы функций. Объясните плиз, в какой части программы по...

Массив @SEARCH_FILES обьявляется внутри функции Scan_Files , но виден почему-то за ее пределами
Имеется вот такой код : #!/usr/bin/perl package Search; @SEARCH_FILES_RESULTS=(0,0,0,0); &amp;Scan_Files(); for ($i=0;$i&lt;2;$i++) ...

Использование функции класса внутри другого класса
И снова к нашим баранам.. Я задавал подобный вопрос, но тут возникла такая трабла: есть класс, который подключается извне //подключаем...

10
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.08.2010, 10:56
davian, а где конкретно описан ваш прототип, если в хидере с описанием класса, то должен все видеть
0
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
05.08.2010, 12:07  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
davian, а где конкретно описан ваш прототип, если в хидере с описанием класса, то должен все видеть
Нет не в хидере с описанием класса, а в отдельном h-файле, который я includ-ю к хидеру с описанием класса... Неужели есть разница?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.08.2010, 12:11
davian, в таком случае разницы нет в принципе...
а вы грузите библиотеку? присваиваете адрес процедуры из библиотеки? или сразу пытаетесь ее использовать?


вот так я к примеру работал с odbc:
в header:
C++
1
  bool (INSTAPI *CreateODBC)(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
C++
1
2
3
4
5
6
7
8
9
  HINSTANCE Odbc = LoadLibrary("odbccp32.dll");
  AnsiString driver = "Oracle in OraClient10g_home1";
  // Создадим пользовательский DSN
  CreateODBC = (bool (INSTAPI*)(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes))::GetProcAddress(Odbc,"SQLConfigDataSource");
  bool iCode = (*(CreateODBC))(NULL, ODBC_ADD_SYS_DSN, driver.c_str(), "DSN=NarDB\0" "EXECSchemaOpt=\0" "EXECSyntax=0\0"
  "Failover=1\0" "FailoverDelay=10\0" "FailoverRetryCount=10\0" "FetchBufferSize=64000\0" "ForceWCHAR=0\0" "Lobs=1\0"
  "MetadataIdDefault=0\0" "NumericSetting=NLS\0" "Password=dbo\0" "QueryTimeout=1\0" "ResultSets=1\0"
  "ServerName=astra46\0" "UserID=dbo\0");
  FreeLibrary(Odbc);
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.08.2010, 14:25
davian, я не зря недавно писал FAQ по работе с DLL ...
Ознакомьтесь, думаю, это поможет в решении вашей проблемы: Dynamic-Link Library: Теория + Практика
0
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
05.08.2010, 16:46  [ТС]
Какое имеет значение загружаю я библиотеку или нет, если у меня просто не видно прототипа... До загрузки не дошел еще...

Так я загружаю библиотеку:

C++
1
2
3
HINSTANCE hDLL;
hDLL=LoadLibrary( "dll.dll" );
lpVDACQ_GetFrameDim = (LPVDACQ_GETFRAMEDIM)GetProcAddress( hDLL, "VDACQ_GetFrameDim" );
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.08.2010, 16:57
davian, ещё раз советую вам обратиться к FAQ.
Пункт 2.3 должен объяснить вам вашу ошибку. (Смотрите о нижнем подчёркивании)
0
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
06.08.2010, 08:00  [ТС]
Цитата Сообщение от MikeSoft Посмотреть сообщение
davian, ещё раз советую вам обратиться к FAQ.
Пункт 2.3 должен объяснить вам вашу ошибку. (Смотрите о нижнем подчёркивании)
Нижнее подчеркивание, это проблема, которая может выявиться во время исполнения программы, у меня же не видно прототипа функции. Почитай первый мой пост...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.08.2010, 08:58
Цитата Сообщение от davian Посмотреть сообщение
пишу функцию, открываю скобку, редактор пишет мне <no parameters expected>
А если наплевать на то, что пишет редактор и просто записать параметры, то оно скомпилируется\исполнится?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2010, 09:48
davian, а между прочим, Evg, вы же и сами знаете, какие вам нужны параметры передать, попробуйте просто откомпилировать код, что вам компилятор скажет
0
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
09.08.2010, 13:01  [ТС]
Вообщем более менее разобрался... Оказывается редактор не отображал параметры просто потому что выше в коде где-то была ошибка... Это уже не важно.... Появилась новая проблема...

Попытаюсь подробно описать...

Есть функция вида :
C++
1
typedef  tVDACQ_CallBackRec* (_stdcall *LPVDACQ_CONNECT)( int, tVDACQ_CallBackProc, void*, short*, int );
tVDACQ_CallBackProc - это процедура обратного вызова, указатель на которую передается в качестве параметра в LPVDACQ_CONNECT и обрабатывает и проверяет флаги, представляемые структурой tVDACQ_CallBackRec...

Структура tVDACQ_CallBackRec:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct {
    int    rFlags,            
           rType,             
           rEvent,            
           rSocket;          
    TCHAR  rMsg[256];      
    int    rFrameWidth,    
           rFrameHeight; 
    short *rFrameBuffer;    
    int    rCaptureRows,     
           rCapturePercent;   
    void  *rUserCallBackProc, 
          *rUserParam;      
    int    rAborted;         
    void  *rPacketData;      
  } tVDACQ_CallBackRec;
Функция tVDACQ_CallBackProc:

C++
1
typedef void static (_stdcall *tVDACQ_CallBackProc)( tVDACQ_CallBackRec* );
Так вот Функцию tVDACQ_CallBackProc я явно не вызываю (передаю указатель при вызове LPVDACQ_CONNECT), но мне нужно передать в эту функцию ряд параметров, в том числе указатель на класс из которого я вызываю функцию LPVDACQ_CONNECT. Так полагаю передать параметры в эту функцию я могу с помощью ассемблерной вставки... Но... ассемблер я не знаю, поэтому прошу помощи...


Коротко еще раз... В функцию надо передать параметры, но не явно при вызове, а по-другому (я так полагаю с помощью ассемблера...)

Кто мог бы помочь в этом деле...

Добавлено через 2 часа 46 минут
Я так понимаю, предыдущий мой пост никто толком не понял...

Забудьте то, что я написал.

У кого-нить есть пример передачи параметров в функцию с помощью ассемблерной вставки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2010, 13:01
Помогаю со студенческими работами здесь

Функции внутри класса влияют на оптимизацию?
Хочу сделать класс с приватной строкой хранящей имя и выводить её через метод класса, рационально ли это? Объясните мне подробно к чему...

Использование указателей на функции-члены внутри самого класса
День добрый форум! Возник такой вопрос. В классе А есть 3 функции и массив, в котором хранятся адреса этих функций. class A ...

Прототип класса
Здравствуйте, мозговитые программисты. Изучаю c++, появилось несколько вопросов. Дело было так: создаю класс в отдельном файле *.h, затем...

прототип класса
Нужен ли прототип класса в MinGW? При компиляции, что с ним , что без, ошибок нет.

Прототип класса
В С++ можно составлять прототипы функций, но можно ли составлять прототипы классов? если да, то как это синтаксически делается? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru