|
|
L780 - Как подключить библиотеки АЦП в Visual C++
Стоит задача написать программу сбора и обработеи данных под Виндоус... начал разбиратся... блин длл не подключается (потом в хелпе нашел что это вроде как не настоящая длл).. а что тогда подключать в проект добовлять .h файлы??? неужелит никто под винду не писал.... подскажите плиз как оно правильно???
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
пример открыть и посмотреть...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
вы знаете не совсем разобрался.... застрял вообще на самом первом этапе...
Дело в том что пишую я в Visuale 7 там чтобы подключить библиотеку нужно....
1. открыть проект
2. пункт меню Project -> Add Reference...
здесь выбираем нужную нам dll и нажимам ок....
я пробовал почтивсе библиотеи что упоминаюся в разных мануалах да под разные вещи.. на все выдает одну и ту же ошибку: this is is not valid assembly or com component...
подскажите пожалуйста это я чтото делаю не верно.. или надо использовать чтото другое??? или как то по другому..
заранее спасибо
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
тут ничего засовывать не надо... в проект если посмотрите включены create.cpp и lguids.cpp... тут динамическая загрузка в процессе выполнения...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
можно поподробнее... какой примерно пример смотреть????
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
блин у меня с таким именем только файлы .bio есть...есть лиэто в вашем доунлоаде?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
после установки драйверов смотрите в папке L-Card/Library...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
почему то такого файла у меня нет .. :-( я поиском искал....
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
а глазами посмотреть, что поставилось?
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
а мануал нормальный написать????
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
хм... та к там готовые проекты под VC6....
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
Мда... а что ставиться при установке драйверов в L-Card/Library? Про шарп ничем помочь не могу....
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
всмысле не признает? он ее точно также как 6 признает...вот за COM объект он ее не признает...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
С# : описываю функцию следующим образом :
[DllImport("lcomp.dll",EntryPoint="QueryInterface")] public static extern Int32 QueryInterface(Guid iid, IntPtr i);
при вызове функции появляется EntryPointNotFoundException : Unable to find an entry point named 'QueryInterface' in DLL 'lcomp.dll'.
вот такая беда
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
так ее там и нет. В таком стиле вызовется только CreateInstance... Дальше все вызывать нужно через указатель на интерфейс... Решение проблеммы возможно если скачать свежую версию и там из папок WLCOMP взять враппер для LabView. Там классический вызов функций. Ну или разобраться как в С# вызывать функции также как в сишных примерах...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
ничего не понял.... 7-(
в шарпе можно вызвать любую функцию из библиотеки если :
перед вызовом указать имя библиотеки с помощью атрибута DllImport
правильно задать все аттрибуты вызываемой функции.
задать точку входа в библиотеку..
что это юудет для нашей/вашей библиотеки?
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
вот в общем то я добился следующих достижений:
этот исходный код выводит версию длл
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace ConsoleApplication2
{
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(GetDllVersion().ToString());
Console.ReadLine();
}
[DllImport("Lusbapi.dll")]
public static extern int GetDllVersion();
}
}
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
чего непонятно то?
в lcomp 1 функция возвращает указатель и все остальные вызываются в виде pointer->Function,
в том что на сайте сейчас есть обертка wlcomp
которая функции вызывает по простому...
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
смотрел я это. Искал подобную конструнцию в документации и на форумах dotNet-а. Не нашел.
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
Значит так? поправте меня если я неправ...
Я так понял, что нужно
1. Скачать из доунлоада сайта файл lcomp.exe
2. Проинсталировать его
3. В проинсталированной папке есть папка Library а в ней соответственно папка wlcomp
4. В найденной папке есть длл wlcomp.dll которую и нужно подключать.
5. Пишем код:
static void Main(string[] args)
{
Console.WriteLine(GetDllVersion().ToString());
Console.ReadLine();
}
[DllImport("wlcomp.dll")]
public static extern int GetDllVersion();
}
и что то должно вернутся, но к сожалению неполучается, на одни функции пишет нет такой, на другие, укажите точку входа???
Хелп!!!!
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
...
[DllImport("d://wlcomp.dll", CallingConvention = CallingConvention.StdCall)]
extern static public Int32 OpenLDevice();
private void button1_Click(object sender, EventArgs e)
{
try
{
Int32 ii = OpenLDevice();
}
catch (Exception ee)
{
}
}
при вызове функции полуил SEHException Exception. Уже не "Unable to find an entry point", прогресс 
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
я тож примерно подобный код написал, только LoadAPIDLL("lcomp.dll"); делал с wlcomp.dll.
Выпадает {System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at lCardNewDLLTest1.dllHandler.CallCreateInstance(UInt64& hDll, UInt64 slot, UInt64& Err)
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
тоже при вызове CallCreateInstance
странно, почему у нас ошибки разные ?
|
|
|
Re: L780 - Как подключить библиотеки АЦП в Visual C++
в общем незнаю правильно ли но вот есть такой результат:
Loading lcomp.dll
Адрес начала библиотеки : 63832064
Вызов функции CallCreateInstance...
Функция выполнена успешно.
Указатель на устройство : 63971096
Вызов функции OpenLDevice...
Функция выполнена успешно.
Дискриптор полученного устройства : 944
Загрузка биоса...
Функция выполнена успешно.
Считывание параметров платы...
Функция выполнена успешно.
Инициализация функции тестирования платы...
Функция выполнена успешно.
Серийный номер платы : 4C2408
Called RequestBufferStream. Allocated memory size(word): 2048. Error result = 0
Called SetParametersStream. Error result = 0
Plata parameters :
Buffer size(word) : 2048
Pages : 1
IrqStep : 2048
FIFO : 2048
Rate : 20,000000000058
Called InitStartLDevice. Error result = Функция выполнена успешно.
syncVarPointer = 64028672 dataStartPointer = 64032768 Разница = -4096
Adress = 64032768 value = 0
Adress = 64032769 value = 0
Adress = 64032770 value = 0
Adress = 64032771 value = 0
Adress = 64032772 value = 73
Adress = 64032773 value = 114
Adress = 64032774 value = 112
Adress = 64032775 value = 32
Adress = 64032776 value = 32
Adress = 64032777 value = 30
Adress = 64032778 value = 86
Adress = 64032779 value = 128
Adress = 64032780 value = 32
Adress = 64032781 value = 30
Adress = 64032782 value = 86
Adress = 64032783 value = 128
Adress = 64032784 value = 0
Adress = 64032785 value = 112
Adress = 64032786 value = 171
Adress = 64032787 value = 129
Adress = 64032788 value = 0
Adress = 64032789 value = 0
Adress = 64032790 value = 0
Adress = 64032791 value = 0
Adress = 64032792 value = 24
Adress = 64032793 value = 128
Adress = 64032794 value = 171
Adress = 64032795 value = 129
Adress = 64032796 value = 24
Adress = 64032797 value = 128
Adress = 64032798 value = 171
Adress = 64032799 value = 129
Adress = 64032800 value = 0
Adress = 64032801 value = 0
Adress = 64032802 value = 0
Adress = 64032803 value = 0
Adress = 64032804 value = 216
Adress = 64032805 value = 1
Adress = 64032806 value = 0
Adress = 64032807 value = 0
Adress = 64032808 value = 0
Adress = 64032809 value = 1
Adress = 64032810 value = 10
Adress = 64032811 value = 12
Adress = 64032812 value = 0
Adress = 64032813 value = 0
Adress = 64032814 value = 0
Adress = 64032815 value = 4
Adress = 64032816 value = 224
Adress = 64032817 value = 26
Adress = 64032818 value = 48
Adress = 64032819 value = 129
Adress = 64032820 value = 208
Adress = 64032821 value = 26
Adress = 64032822 value = 48
Adress = 64032823 value = 129
Adress = 64032824 value = 0
Adress = 64032825 value = 0
Adress = 64032826 value = 0
Adress = 64032827 value = 0
Adress = 64032828 value = 0
Adress = 64032829 value = 0
Adress = 64032830 value = 0
Adress = 64032831 value = 0
Adress = 64032832 value = 0
Adress = 64032833 value = 0
Adress = 64032834 value = 0
Adress = 64032835 value = 0
Adress = 64032836 value = 0
Adress = 64032837 value = 0
Adress = 64032838 value = 0
Adress = 64032839 value = 0
Adress = 64032840 value = 0
Adress = 64032841 value = 0
Adress = 64032842 value = 0
Adress = 64032843 value = 0
Adress = 64032844 value = 0
Adress = 64032845 value = 0
Adress = 64032846 value = 0
Adress = 64032847 value = 0
Adress = 64032848 value = 0
Adress = 64032849 value = 0
Adress = 64032850 value = 0
Adress = 64032851 value = 0
Adress = 64032852 value = 0
Adress = 64032853 value = 0
Adress = 64032854 value = 0
Adress = 64032855 value = 0
Adress = 64032856 value = 64
Adress = 64032857 value = 77
Adress = 64032858 value = 128
Adress = 64032859 value = 129
Adress = 64032860 value = 0
Adress = 64032861 value = 0
Adress = 64032862 value = 0
Adress = 64032863 value = 0
Adress = 64032864 value = 0
Adress = 64032865 value = 0
Adress = 64032866 value = 0
Adress = 64032867 value = 0
Вызов функции StopLDevice...
Функция выполнена успешно.
Вызов функции CloseLDevice...
Функция выполнена успешно.
Вызов функции FreeAPIDLL...
Функция не поддерживается этой платой.
помоему что то нетак...
выводится это так
Data += " syncVarPointer = " + syncVarPointer.ToString() + " dataStartPointer = " + dataStartPointer.ToString();
Data += " Разница = " + (syncVarPointer.ToInt32() - dataStartPointer.ToInt32()).ToString();
for (int i = 0; i<100; i++)
{
RealAdress = (uint)(dataStartPointer.ToInt32() + i);
csDriverLibrary.GetDataFromBuffer(ref hIfc, RealAdress, ref MasOfData, (uint)1);
Data += "Adress = " + RealAdress.ToString() + " value = " + MasOfData.ToString()+ "/n" ;
}
а структура вот такая:
csDriverLibrary.WADC_PAR_0 helper = new csDriverLibrary.WADC_PAR_0();
helper.s_Type = (ushort)csDriverLibrary.L_ADC_PARAM; // тип структуры (должен быть L_ADC_PARAM);
helper.AutoInit = 1; // флаг указывающий на тип сбора данных 0 - однократный 1 - циклический;
helper.dRate = 20; // частота опроса каналов в кадре (кГц);
helper.dScale = 0;
helper.dKadr = 0.0; // интервал между кадрами (мс);
helper.SynchroType = 3; // тип синхронизации;
helper.SynchroSensitivity = 0;
helper.SynchroMode = 0;
helper.AdChannel = 0;
helper.AdPorog = 0;
helper.NCh = 1; // количество опрашиваемых каналов ;
helper.Chn[0] = 0x0; // массив с номерами каналов и усилением на них; описывает порядок опроса каналов;
helper.Chn[1] = 0x1;
helper.Chn[2] = 0x2;
helper.Chn[3] = 0x3;
helper.FIFO = 2048; // размер половины аппаратного буфера FIFO на плате;
helper.IrqStep = 2048; //
helper.Pages = 32; // произведение этих двух параметров IrqStep*Pages задает количество отсчетов,
// которое соберет плата при однократном сборе, но не больше чем 128К отсчетов.
// При циклическом сборе они игнорируются – буфер всегда 128К.
helper.IrqEna = 1; // разрешение генерации прерывания от платы (mask/0),
// при этом mask - это младшие 16 бит в слове разрешающем прерывания от платы (блок АЦП);
helper.AdcEna = 1; // разрешение работы АЦП (1/0);
csDriverLibrary.FillDAQparameters(ref hIfc, ref helper, csDriverLibrary.L_ADC_PARAM);
DAQparameters.t3 = helper;
uint tm = 100; // мы захотели 100000 отсчетов
Err = csDriverLibrary.RequestBufferStream(ref hIfc, ref tm, csDriverLibrary.L_STREAM_ADC);
result += "/nCalled RequestBufferStream. Allocated memory size(word): " + tm.ToString() + ". Error result = " + Err.ToString() + '/n';
Err = csDriverLibrary.SetParametersStream(ref hIfc, ref helper, /*csDriverLibrary.L_STREAM_ADC*/2, ref tm, ref dataStartPointer, ref syncVarPointer, csDriverLibrary.L_STREAM_ADC);
result += "Called SetParametersStream. Error result = " + Err.ToString() + "/n";
result += "Plata parameters : " + "/n";
result += "Buffer size(word) : " + tm.ToString() + "/n";
result += "Pages : " + helper.Pages.ToString() + "/n";
result += "IrqStep : " + helper.IrqStep.ToString() + "/n";
result += "FIFO : " + helper.FIFO.ToString() + "/n";
result += "Rate : " + helper.dRate.ToString() + "/n";
DAQparameters.t3 = helper;
Err = csDriverLibrary.EnableCorrection(ref hIfc,1); // Коррекция
Err = csDriverLibrary.InitStartLDevice(ref hIfc); // Инициализация
result += "Called InitStartLDevice. Error result = " + ErrorMessenger(Err) + "/n";
Вопрос : почему разница между syncVarPointer = 64028672 dataStartPointer = 64032768 4096?
|