Форум: Техническая поддержка

Тема: L780 - Как подключить библиотеки АЦП в Visual C++

Вы не вошли.

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

Denis
09.01.2006 12:12:15
#1

Гость

L780 - Как подключить библиотеки АЦП в Visual C++

Стоит задача написать программу сбора и обработеи данных под Виндоус... начал разбиратся... блин длл не подключается (потом в хелпе нашел что это вроде как не настоящая длл).. а что тогда подключать в проект добовлять .h файлы??? неужелит никто под винду не писал.... подскажите плиз как оно правильно???

09.01.2006 20:29:14
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

пример открыть и посмотреть...

Denis
16.01.2006 15:30:42
#3

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

вы знаете не совсем разобрался.... застрял вообще на самом первом этапе...
Дело в том что пишую я в Visuale 7 там чтобы подключить библиотеку нужно....
1. открыть проект
2. пункт меню Project -> Add Reference...
здесь выбираем нужную нам dll  и нажимам ок....

я пробовал почтивсе библиотеи что упоминаюся в разных мануалах да под разные вещи.. на все выдает одну и ту же ошибку: this is is not valid assembly or com component...

подскажите пожалуйста это я чтото делаю не верно.. или надо использовать чтото другое??? или как то по другому..

заранее спасибо

16.01.2006 15:36:18
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

тут ничего засовывать не надо... в проект если посмотрите включены create.cpp и lguids.cpp... тут динамическая загрузка в процессе выполнения...

Denis
16.01.2006 15:47:10
#5

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

можно поподробнее... какой примерно пример смотреть????

16.01.2006 16:42:59
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

L783.TST

Denis
16.01.2006 16:49:39
#7

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

блин у меня с таким именем только файлы .bio есть...есть лиэто в вашем доунлоаде?

17.01.2006 07:19:11
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

после установки драйверов смотрите в папке L-Card/Library...

Denis
17.01.2006 17:54:07
#9

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

почему то такого файла у меня нет .. :-( я поиском искал....

17.01.2006 19:53:06
#10

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

а глазами посмотреть, что поставилось?

Denis
18.01.2006 14:43:31
#11

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

а мануал нормальный написать????

18.01.2006 15:17:16
#12

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

хм... та к там готовые проекты под VC6....

27.01.2006 10:11:23
#13

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

Мда... а что ставиться при установке драйверов в L-Card/Library? Про шарп ничем помочь не могу....

30.01.2006 15:55:08
#14

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

всмысле не признает? он ее точно также как 6 признает...вот за COM объект он ее не признает...

Женя
02.02.2006 06:36:20
#15

Гость

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'.

вот такая беда

02.02.2006 07:10:52
#16

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

так ее там и нет. В таком стиле вызовется только CreateInstance... Дальше все вызывать нужно через указатель на интерфейс... Решение проблеммы возможно если скачать свежую версию и там из папок WLCOMP взять враппер  для LabView. Там классический вызов функций. Ну или разобраться как в С# вызывать функции также как в сишных примерах...

Denis
02.02.2006 14:40:10
#17

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

ничего не понял.... 7-(

в шарпе можно вызвать любую функцию из библиотеки если :
перед вызовом указать имя библиотеки с помощью атрибута DllImport
правильно задать все аттрибуты вызываемой функции.
задать точку входа в библиотеку..

что это юудет для нашей/вашей библиотеки?

Denis
02.02.2006 14:43:29
#18

Гость

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();        
    }
}

02.02.2006 17:03:49
#19

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 - Как подключить библиотеки АЦП в Visual C++

чего непонятно то?
в lcomp 1 функция возвращает указатель и все остальные вызываются в виде pointer->Function,
в том что на сайте сейчас есть обертка wlcomp
которая функции вызывает по простому...

Женя
02.02.2006 22:58:35
#20

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

смотрел я это. Искал подобную конструнцию в документации и на форумах dotNet-а. Не нашел.

Denis
06.02.2006 14:07:34
#21

Гость

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();    
        }

и что то должно вернутся, но к сожалению неполучается, на одни функции пишет нет такой, на другие, укажите точку входа???

Хелп!!!!

Женя
06.02.2006 23:39:07
#22

Гость

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", прогресс smile

Женя
08.02.2006 20:19:46
#23

Гость

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)

Женя
08.02.2006 20:29:01
#24

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

тоже при вызове CallCreateInstance

странно, почему у нас ошибки разные ?

Denis
03.03.2006 17:30:53
#25

Гость

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?

Контакты

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

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

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

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