#c #pointers #dll #parameter-passing #labview
#c #указатели #dll #передача параметров #labview
Вопрос:
Я вызываю DLL, написанную на C , из LabVIEW. Прототип функции:
ULONG DAQ_Open(PVOID *pHandle);
Как я могу передать правильный параметр из LabVIEW? Неужели просто невозможно передать параметры типа pointer в pointer из LabVIEW в DLL?
Комментарии:
1. Как насчет приведения вашего параметра к
PVOID*
? Или привести адрес вашего параметра кPVOID*
?2. извините за оффтоп, но я не совсем понимаю, в чем преимущество наличия
void **
вместоvoid *
?3. @GreenScape, в системе Windows фактический тип идентификатора ресурса — PVOID . Функция DAQ_Open пытается получить дескриптор, представляющий некоторый ресурс. Поскольку возвращаемое значение использовалось в качестве кода ошибки, PVOID* является единственным выбором.
Ответ №1:
Пока вы не ожидаете передачи указателя на LabVIEW VI для использования в качестве обратного вызова (что является отдельным и гораздо более сложным ответом), параметр — это просто указатель. При настройке узла библиотеки вызовов используйте тип «числовой» и тип данных «целое число без знака размером с указатель» и передайте «указатель на значение».
Это должно дать вам прототип: void funcName(uintptr_t *arg1);
Ответ №2:
Для получения дополнительных примеров вызова DLL-файлов из LabVIEW (включая указатели, структуры, массивы и т. Д.), Вот удобная статья, Которая ссылается на несколько других подробных примеров: https://decibel.ni.com/content/docs/DOC-9076
Ответ №3:
Вам следует поискать «указатели DLL labview» на веб-сайте NI, чтобы получить представление. Кроме того, есть пример, поставляемый с LabVIEW, называемый Call DLL.vi в котором есть примеры того, как вы можете этого добиться. Пример VI можно найти, перейдя в раздел Справка -> Найти примеры, а затем выполнив поиск DLL.
Вызов DLL.vi VI позволяет просматривать примеры типов данных внешнего кода (C и C ) и то, как они взаимодействуют с LabVIEW. У каждого типа данных есть пример VI, который демонстрирует использование узла функции библиотеки вызовов. Чтобы открыть пример VI для определенного типа данных, выберите этот тип данных из списка слева, а затем нажмите кнопку «Открыть пример VI для текущего типа данных». Прототип функции, исходный код функции и любые конкретные сведения об этом примере появятся в кластере информации о внешнем коде.
Комментарии:
1. Привет, Аднан, спасибо за твой ответ. В вызове нет эквивалента LPVOID ** DLL.vi . подход flndr решает эту проблему.