Свежие обсуждения
Компьютеры

Позвать функцию на Си

1 2 4

Вот , я закомментировал эту функцию, теперь он ругается , на две других, может ноги отсюда ростут?
POLINK: error: Unresolved external symbol 'HTCSensorOpen'.
POLINK: error: Unresolved external symbol 'HTCSensorClose'.
Может ему надо как-то объяснить что они внешние?
chav1961: выложите весь исходник программы.
Очень громоздко , если не поможет , тогда.

 

Нет, проблема не в этом. Эти сообщения - о том, что эти функции не найдены на стадии линковки - тогда объяснять уже поздно . Сверните прогу в архив и выкладывайте. И еще один момент - каким компилятором пользуетесь?

 

Pelles C
Программа для Вин мобайл.

205651.rar

 

Ув Alexey!

1. Настоятельно рекомендую переименовать файл из main.c в main.cpp! У меня Microsoft Visual Studio - он без такого переименования компилировать файл отказывается.
2. Структура SensorData должна быть объявлена до описания функции HTCSensorGetDataOutput !
3. Alexey, нескромный вопрос - вы сами писали программу? Дело в том, что в ней вы пользуетесь функцией LoadLibrary. Если для доступа к DLL используется именно эта функция, тогда программа написана совершенно неверно.

 

chav1961: вы сами писали программу?
Часть писала среда , часть я. Короче, я присоединял нужное мне к тому, что накропала среда. Лоад Лайбруари что-то присоединяла, какой-то хендл я выводил для пробы.
chav1961: объявлена до описания функции
Сделал, без изменений.
chav1961: переименовать файл из main.c в main.cpp!
Она игнорирует такое расширение.

 

1. т.е. сейчас int HTCSensorGetDataOutput(HANDLE handle, SensorData& data); у вас после struct SensorData {.........}? А что компилятор говорит?

2. После того, как отработает LoadLibrary, нужно получить адреса точек входа в библиотеке для ваших функций. Для этого используется функция GetProcAddress. Должно быть что-то навроде:

HANDLE hLib;
HANDLE (*HTCSensorOpen)(int sensor_ID); // Вот так нужно объявить точки входа!

hLib = LoadLibrary(_T("HTCSensorSDK"));
HTCSensorOpen = (HANDLE (*)(int))GetProcAddress(hLib,_T("HTCSensorOpen")); // Вот так нужно определить их адреса

hGsens= (*HTCSensorOpen)(1); // А вот так ими нужно пользоваться!

 

chav1961: А что компилятор говорит?
Тоже самое:
..Vmax\main.c(47): error #2095: Missing parameter type 'SensorData'.
..\Vmax\main.c(47): warning #2099: Missing type specifier.
..Vmax\main.c(47): error #2001: Syntax error: expected ')' but found '&'.
..\Vmax\main.c(151): error #2140: Type error in argument 2 to 'HTCSensorGetDataOutput'; found 'struct SensorData *', expected 'int'.

chav1961: Для этого используется функция GetProcAddress
А про нее я забыл.

 

Тогда попробуйте еще вместо struct SensorData {.....} Data; сделать так:

typedef struct {.....} SensorData;
SensorData Data;
...
..... .....(HANDLE handle, SensorData& data);

 

chav1961: попробуйте еще
Чуть полегчало
..Vmax\main.c(48): error #2001: Syntax error: expected ')' but found '&'.
..Vmax\main.c(152): error #2140: Type error in argument 2 to 'HTCSensorGetDataOutput'; found 'SensorData *', expected 'SensorData'

 

Ну, теперь замените в описании функции SensorData& data на SensorData *data, и будет вам счастье