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

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

05.08.2010, 10:54. Показов 2051. Ответов 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
3956 / 1811 / 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
3956 / 1811 / 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru