Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143

Unresolved external '_ibsta'

03.02.2016, 17:54. Показов 1572. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Знаю, что проблема не новая, но я сделал все как учили, но проблема осталась
Я в своей программы использую библиотеку gpib-32.dll от Agilent. На диске были найдены только gpib-32.dll и ni488.h
gpib-32.lib создавал implib.exe и подключил к своему проекту. функции программа видит и нормально собирает. Но как только мне понадобилось использовать переменные, которые в ni488.h объявлены как
C++
1
2
3
extern int ibsta;
extern int iberr;
extern long ibcntl;
сразу вылезла эта ошибка сборки(
что в такой ситуации делать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2016, 17:54
Ответы с готовыми решениями:

Unresolved external
Доброго времени суток. Такая вот байда получается...Суть вот в чем: По заданию преподавателя необходимо было реализовать динамическую...

Unresolved external
Builder 2010 Error: Unresolved external '__fastcall System::TObject::NewInstance(System::TMetaClass *)' referenced from...

---Unresolved external---
Доброго времени суток! Я тут писал прогу(ну эт понятно),запустил, понял, что не правильно поставил FormStyle. Программа Не отвечает!...

5
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.02.2016, 08:58
Цитата Сообщение от painless Посмотреть сообщение
что в такой ситуации делать?
Найти модуль, где эти переменные объявлены не как extern и подключить его ранее ni488.h.
0
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
04.02.2016, 09:57  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Найти модуль, где эти переменные объявлены не как extern и подключить его ранее ni488.h.
в их справке есть пример функции с использованием этих переменных и там ничего криминального не подключено
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include <ni488.h>
#include <stdio.h>
 
int checkErrExit()
{
if(ibsta & ERR) // an error occurred
{
switch (iberr) {
case EDVR:            // ibcntl contains a sub-error code
printf("System error %d\n",ibcntl);   
break;
case ECIC: 
printf("Not Controller in Charge \n");
break;
case ENOL: 
printf("No Listeners \n");
break;
case EADR: 
printf("GPIB interface not addressed correctly \n");
break;
case EARG: 
printf("Invalid argument to function call \n ");
break;
case ESAC: 
printf("GPIB interface not System Controller as required \n "); 
break;
case EABO: 
printf("I/O operation aborted (timeout) \n");
break;
case ENEB: 
printf("Nonexistent GPIB interface \n");
break;
case EDMA: 
printf("DMA error \n");
break;
case EOIP: 
printf("Asynchronous I/O in progress \n ");
break;
case ECAP: 
printf("No capability for operation \n");
break;
case EFSO: 
printf("File system error \n");
break;
case EBUS: 
printf("GPIB bus error \n");
break;
case ESRQ: 
printf("SRQ stuck in ON position \n");
break;
case ETAB: 
printf("Table problem \n");
break;
case ELCK: 
printf("Interface is locked \n");
break;
case EARM: 
printf("ibnotify callback failed to rearm \n");
break;
case EHDL: 
printf("Input handle is invalid \n ");
break;
case EWIP: 
printf("Wait in progress on specified input handle \n");
break;
case ERST: 
printf("The event notification was cancelled due to a reset of the interface \n");
break;
case EPWR: 
printf("The interface lost power \n");
break;
default: 
printf("Unexpected error \n");
break;
}
exit (1);// exit the program in case of any error 
}
return 0;
}

запустил в папке поиск по *.h с текстом ibsta и кроме ni488.h ничего не находится(
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
04.02.2016, 10:16
Лучший ответ Сообщение было отмечено painless как решение

Решение

painless, читаем мануал:
Next, your Win32 application needs to use GetProcAddress to get the addresses of the global status variables and functions your application needs. The following code fragment shows you how to get the addresses of the pointers to the status variables and any functions your application needs:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Pointers to NI-488.2 global status variables */
int *Pibsta;          
int *Piberr;
 
long *Pibcntl;
static int(__stdcall *Pibdev)
(int ud, int pad, int sad, int tmo, int eot, int eos);
static int(__stdcall *Pibonl)(int ud, int v);
Pibsta = (int *) GetProcAddress(Gpib32Lib, (LPCSTR)"user_ibsta");
Piberr = (int *) GetProcAddress(Gpib32Lib, (LPCSTR)"user_iberr");
Pibcntl = (long *) GetProcAddress(Gpib32Lib, (LPCSTR)"user_ibcnt");
Pibdev = (int (__stdcall *)(int, int, int, int, int, int)) 
GetProcAddress(Gpib32Lib, (LPCSTR)"ibdev");
Pibonl = (int (__stdcall *)(int, int)) 
GetProcAddress(Gpib32Lib, (LPCSTR)"ibonl");
If GetProcAddress fails, it returns a NULL pointer. The following code fragment shows you how to verify that none of the calls to GetProcAddress failed:
C++
1
2
3
4
5
6
7
8
9
if ((Pibsta  == NULL) ||
    (Piberr  == NULL) ||
    (Pibcntl == NULL) ||
    (Pibdev  == NULL) ||
    (Pibonl  == NULL)) {
   /* Free the GPIB library */
   FreeLibrary(Gpib32Lib);
   printf("GetProcAddress failed.");
}
Your Win32 application needs to dereference the pointer to access either the status variables or function. The following code shows you how to call a function and access the status variable from within your application:
C++
1
2
3
4
dvm = (*Pibdev) (0, 1, 0, T10s, 1, 0);
if (*Pibsta & ERR) {
   printf("Call failed");
}
1
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
04.02.2016, 11:25  [ТС]
до сих пор только мучается вопрос, зачем так реализовано.
я привык работать с явной загрузкой dll и мне это удобно, и работа с функциями тут это работает, а вот с переменными почему-то не так.
Было бы интересно узнать зачем, может кто разъяснит неопытному
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
04.02.2016, 11:35
Затем что нельзя вот так же просто, как функции, экспортировать переменные из DLL. Поэтому для обращения к переменным пишутся обертки в виде функций.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2016, 11:35
Помогаю со студенческими работами здесь

Unresolved external
Проблема следующая: класс &quot;die&quot; хранится отдельным файлом. .h: #ifndef butsH #define butsH class die{ private: int left; ...

Ошибка Unresolved external
Unresolved external &quot;Tform1::&quot; referenced from D://... (путь...) Добавлено через 1 минуту Код(Unit.cpp): ...

Unresolved external __fastcall
Было у меня несколько таймеров на форме, к каждому таймеру был привязан какойто код. Таймеры я удалил, код тоже. (Странно, что он не...

Unresolved External. (XE2)
Здравствуйте! Помогите найти ошибку в коде! При запуске программы в режиме debug ошибок не было. Решил делать release, и тут...

Ошибка Unresolved external
Вот текст программы:#include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru