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

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

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

Author24 — интернет-сервис помощи студентам
Использую 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2010, 10:54
Ответы с готовыми решениями:

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

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

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

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

10
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.08.2010, 10:56 2
davian, а где конкретно описан ваш прототип, если в хидере с описанием класса, то должен все видеть
0
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
05.08.2010, 12:07  [ТС] 3
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
davian, а где конкретно описан ваш прототип, если в хидере с описанием класса, то должен все видеть
Нет не в хидере с описанием класса, а в отдельном h-файле, который я includ-ю к хидеру с описанием класса... Неужели есть разница?
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.08.2010, 12:11 4
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
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.08.2010, 14:25 5
davian, я не зря недавно писал FAQ по работе с DLL ...
Ознакомьтесь, думаю, это поможет в решении вашей проблемы: Dynamic-Link Library: Теория + Практика
0
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
05.08.2010, 16:46  [ТС] 6
Какое имеет значение загружаю я библиотеку или нет, если у меня просто не видно прототипа... До загрузки не дошел еще...

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

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

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

Есть функция вида :
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
09.08.2010, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2010, 13:01
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru