Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

E154 - Выдает ошибку LNK2019 при запуске примера помогите пожалуйста

Вы не вошли.

 Поиск | Регистрация | Вход 

Mike_Vasovki
16.11.2023 14:32:17
#1

Гость

E154 - Выдает ошибку LNK2019 при запуске примера помогите пожалуйста

Выдает такие вот ошибки когда пытаюсь запустить пример проекта на C++ чтобы запустить E154


Серьезность    Код    Описание    Проект    Файл    Строка    Состояние подавления    Подробности
Ошибка    LNK2019    ссылка на неразрешенный внешний символ GetDllVersion в функции main.   
E:\Programist\Project C++\MikVasovsky\MikVasovsky\MikVasovsky.obj    1   
   
Серьезность    Код    Описание    Проект    Файл    Строка    Состояние подавления    Подробности
Ошибка    LNK2019    ссылка на неразрешенный внешний символ CreateLInstance в функции main.   
E:\Programist\Project C++\MikVasovsky\MikVasovsky\MikVasovsky.obj    1   
   
Серьезность    Код    Описание    Проект    Файл    Строка    Состояние подавления    Подробности
Ошибка    LNK1120    неразрешенных внешних элементов: 2   
E:\Programist\Project C++\MikVasovsky\x64\Debug\MikVasovsky.exe    1       

#include <stdio.h>
#include <conio.h>
#include <iostream>
#include "Lusbapi.h"
#include <cstring>
#include <iomanip>

#define CHANNELS_QUANTITY			(0x4)

// аварийный выход из программы
void AbortProgram(char *ErrorString, bool AbortionFlag = true);

// версия библиотеки
DWORD DllVersion;
// указатель на интерфейс модуля
ILE440 *pModule;
// дескриптор устройства
HANDLE ModuleHandle;
// название модуля
char ModuleName[7];
// скорость работы шины USB
BYTE UsbSpeed;
// структура с полной информацией о модуле
MODULE_DESCRIPTION_E440 ModuleDescription;
// структура параметров работы АЦП модуля
ADC_PARS_E440 ap;

// отсчёты АЦП
SHORT AdcSample1, AdcSample2, AdcSample3, AdcSample4;
// индекс входного диапазона напряжения
const WORD InputRangeIndex = ADC_INPUT_RANGE_2500mV_E440;

//------------------------------------------------------------------------
// основная программа
//------------------------------------------------------------------------

int main()
{
//------------------------------------------------------------------------

  WORD i;

  // зачистим экран монитора

  printf(" *********************************\n");
  printf(" Module E14-440                   \n");
  printf(" Console example AdcSample stream \n");
  printf(" *********************************\n\n");

  // проверим версию используемой библиотеки Lusbapi.dll
  if((DllVersion = GetDllVersion()) != CURRENT_VERSION_LUSBAPI)
  {
          char String[128];
          sprintf(String, " Lusbapi.dll Version Error!!!\n   Current: %1u.%1u. Required: %1u.%1u",
                                                                                  DllVersion >> 0x10, DllVersion & 0xFFFF,
                                                                                  CURRENT_VERSION_LUSBAPI >> 0x10, CURRENT_VERSION_LUSBAPI & 0xFFFF);

          AbortProgram(String);
  }
  else printf(" Lusbapi.dll Version --> OK\n");

  // попробуем получить указатель на интерфейс
  pModule = static_cast<ILE440 *>(CreateLInstance("e440"));
  if(!pModule) AbortProgram(" Module Interface --> Bad\n");
  else printf(" Module Interface --> OK\n");

  // попробуем обнаружить модуль E14-440 в первых MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI виртуальных слотах
  for(i = 0x0; i < MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI; i++) if(pModule->OpenLDevice(i)) break;
  // что-нибудь обнаружили?
  if(i == MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI) AbortProgram(" Can't find any module E14-440 in first 127 virtual slots!\n");
  else printf(" OpenLDevice(%u) --> OK\n", i);

  // попробуем прочитать дескриптор устройства
  ModuleHandle = pModule->GetModuleHandle();
  if(ModuleHandle == INVALID_HANDLE_VALUE) AbortProgram(" GetModuleHandle() --> Bad\n");
  else printf(" GetModuleHandle() --> OK\n");

  // прочитаем название модуля в обнаруженном виртуальном слоте
  if(!pModule->GetModuleName(ModuleName)) AbortProgram(" GetModuleName() --> Bad\n");
  else printf(" GetModuleName() --> OK\n");
  // проверим, что это 'E14-440'
  if(strcmp(ModuleName, "E440")) AbortProgram(" The module is not 'E14-440'\n");
  else printf(" The module is 'E14-440'\n");

  // попробуем получить скорость работы шины USB
  if(!pModule->GetUsbSpeed(&UsbSpeed)) AbortProgram(" GetUsbSpeed() --> Bad\n");
  else printf(" GetUsbSpeed() --> OK\n");
  // теперь отобразим скорость работы шины USB
  printf("   USB is in %s\n", UsbSpeed ? "High-Speed Mode (480 Mbit/s)" : "Full-Speed Mode (12 Mbit/s)");

  // код LBIOS'а возьмём из соответствующего ресурса штатной DLL библиотеки
  if(!pModule->LOAD_MODULE()) AbortProgram(" LOAD_MODULE() --> Bad\n");
  else printf(" LOAD_MODULE() --> OK\n");

  // проверим загрузку модуля
  if(!pModule->TEST_MODULE()) AbortProgram(" TEST_MODULE() --> Bad\n");
  else printf(" TEST_MODULE() --> OK\n");

  // получим информацию из ППЗУ модуля
  if(!pModule->GET_MODULE_DESCRIPTION(&ModuleDescription)) AbortProgram(" GET_MODULE_DESCRIPTION() --> Bad\n");
  else printf(" GET_MODULE_DESCRIPTION() --> OK\n");

  // получим текущие параметры работы АЦП
  if(!pModule->GET_ADC_PARS(&ap)) AbortProgram(" GET_ADC_PARS() --> Bad\n");
  else printf(" GET_ADC_PARS() --> OK\n");

  // установим желаемые параметры работы АЦП
  ap.IsCorrectionEnabled = true;   // разрешим корректировку данных на уровне драйвера DSP
  ap.InputMode = NO_SYNC_E440;	   // обычный сбор данных безо всякой синхронизации ввода
  ap.ChannelsQuantity = CHANNELS_QUANTITY;// четыре активных канала
  // формируем управляющую таблицу
  for(i = 0x0; i < ap.ChannelsQuantity; i++)
          ap.ControlTable[i] = (WORD)(i | (InputRangeIndex << 0x6));
  ap.AdcRate = 100.0;									// частота работы АЦП в кГц
  ap.InterKadrDelay = 0.0;							// межкадровая задержка в мс
  ap.AdcFifoBaseAddress = 0x0;			  			// базовый адрес FIFO буфера АЦП в DSP модуля
  ap.AdcFifoLength = MAX_ADC_FIFO_SIZE_E440;	// длина FIFO буфера АЦП в DSP модуля
  // будем использовать фирменные калибровочные коэффициенты, которые храняться в ППЗУ модуля
  for(i = 0x0; i < ADC_CALIBR_COEFS_QUANTITY_E440; i++)
  {
          ap.AdcOffsetCoefs[i] =  ModuleDescription.Adc.OffsetCalibration[i];
          ap.AdcScaleCoefs[i] =  ModuleDescription.Adc.ScaleCalibration[i];
  }

  // передадим требуемые параметры работы АЦП в модуль
  if(!pModule->SET_ADC_PARS(&ap)) AbortProgram(" SET_ADC_PARS() --> Bad\n");
  else printf(" SET_ADC_PARS() --> OK\n");

  // отобразим параметры модуля на экране монитора
  printf(" \n\n");
  printf(" Module E14-440 (S/N %s) is ready ... \n", ModuleDescription.Module.SerialNumber);
  printf("   Module Info:\n");
  printf("     Module  Revision   is '%c'\n", ModuleDescription.Module.Revision);
  printf("     AVR Driver Version is %s (%s)\n", ModuleDescription.Mcu.Version.Version, ModuleDescription.Mcu.Version.Date);
  printf("     LBIOS   Version    is %s (%s)\n", ModuleDescription.Dsp.Version.Version, ModuleDescription.Dsp.Version.Date);
  printf("   Adc parameters:\n");
  printf("     Data Correction is %s\n", ap.IsCorrectionEnabled ? "enabled" : "disabled");
  printf("     Input Range  = %6.2f Volt\n", ADC_INPUT_RANGES_E440[InputRangeIndex]);

  printf("\n Press any key if you want to terminate this program...\n");
  // цикл перманентного выполнения функции ADC_SAMPLE и
  // отображения полученных данных на экране диплея
  printf("\n\n");
  printf(" ADC Channel:                     1         2         3         4\n");
  while(!kbhit())
  {
          if(!pModule->ADC_SAMPLE(&AdcSample1, (WORD)(0x00 | (InputRangeIndex << 6))))
            {
              printf("\n\n  ADC_SAMPLE(, 0) --> Bad\n");
              break;
            }
          else if(!pModule->ADC_SAMPLE(&AdcSample2, (WORD)(0x01 | (InputRangeIndex << 6))))
            {
              printf("\n\n  ADC_SAMPLE(, 1) --> Bad\n");
              break;
            }
          else if(!pModule->ADC_SAMPLE(&AdcSample3, (WORD)(0x02 | (InputRangeIndex << 6))))
            {
              printf("\n\n  ADC_SAMPLE(, 2) --> Bad\n");
              break;
            }
          else if(!pModule->ADC_SAMPLE(&AdcSample4, (WORD)(0x03 | (InputRangeIndex << 6))))
            {
              printf("\n\n  ADC_SAMPLE(, 3) --> Bad\n");
              break;
            }


          printf(" AdcSample Data (ADC code):     %5d     %5d     %5d     %5d\r", AdcSample1, AdcSample2,AdcSample3,AdcSample4);
  }

  // освободим интерфейс модуля
  printf("\n\n");
  AbortProgram(" The program was completed successfully!!!\n", false);

//------------------------------------------------------------------------
        return 0;
}

//------------------------------------------------------------------------
// аварийное завершение программы
//------------------------------------------------------------------------
void AbortProgram(char *ErrorString, bool AbortionFlag)
{
	// подчищаем интерфейс модуля
	if(pModule)
	{
		// освободим интерфейс модуля
		if(!pModule->ReleaseLInstance()) printf(" ReleaseLInstance() --> Bad\n");
		else printf(" ReleaseLInstance() --> OK\n");
		// обнулим указатель на интерфейс модуля
		pModule = NULL;
	}

	// выводим текст сообщения
	if(ErrorString) printf(ErrorString);

	// прочистим очередь клавиатуры
	if(kbhit()) { while(kbhit()) getch(); }

	// если нужно - аварийно завершаем программу
	if(AbortionFlag) exit(0x1);
	// или спокойно выходим из функции
	else return;
}
24.11.2023 18:27:13
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,486

Re: E154 - Выдает ошибку LNK2019 при запуске примера помогите пожалуйста

Если я не ошибаюсь, Вы используете среду MicroSoft Visual Studio и пытаетесь собрать 64-разрядное приложение с использованием библиотеки Lusbapi. Всё верно?

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск