Всем привет
есть ключи защиты Guardant.
была разработана программа в LV которая использует для защиты API функции от этого ключей.
программа работает нормально.
Есть функция в API: GrdFind .
Функция GrdFind осуществляет поиск локальных и удаленных ключей, удовлетворяющим установленным критериям поиска:
int GRD_API GrdFind(
HANDLE hGrd,
DWORD dwMode,
DWORD *pdwID,
TGrdFindInfo *pFindInfo
);
где, pFindInfo - указатель на структуру типа TGrdFindInfo, в поля которой должны возвращаться данные о найденном ключе. Память для структуры должна быть выделена до вызова функции. В случае, если структура не используется, или не использование структур не поддерживается языком программирования, параметр pdwID должен быть равен NULL.
typedef struct {
DWORD dwPublicCode; // Public code
BYTE byHrwVersion; // Аппаратная версия ключа
BYTE byMaxNetRes; // Максимальный сетевой ресурс
WORD wType; // Флаги типа ключа
DWORD dwID; // ID ключа
BYTE byNProg; // Номер программы
BYTE byVer; // Версия
WORD wSN; // Серийный номер
WORD wMask; // Битовая маска
WORD wGP; // Счетчик запусков GP/Счетчик времени
WORD wRealNetRes; // Текущий сетевой ресурс, д.б. <= byMaxNetRes
DWORD dwIndex; // Индекс для удаленного программирования
BYTE abyReserved[0x200-0x1A]; // Зарезервировано
} TGrdFindInfo;
Как мне подключить эту структуру из LV к API функции, чтоб я увидел всю эту информацию в проекте LV?
Александр
Получение структуры с DLL
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Получение структуры с DLL
Структура в является кластером, так что если вы хотите передать в функцию указатель на структуру, вам нужно создать кластерную константу и заполнить её согласно описанию типов. Заходите в описание типов Windows, смотрите обозначение типа и назначаете в такой же тип. Например, DWORD = 32-bit unsigned integer = U32. Если в структуре только числа, то всё достаточно просто.
Однако, меня насторожило вот это:
То есть, в конце структуры ещё нужно выделить массив U8 на 486 элементов... Массив использовать нельзя, у него другой тип. Можно, конечно, вставлять 486 констант U8 друг за другом Или поставить только одну, если в API в эту область памяти ничего не пишется и оттуда не читается. Иначе будет access violation. Ну, или сделать вот так:
Ещё вариант - выделить одну большую область памяти размером sizeof (TGrdFindInfo), передать на неё указатель в вашу функцию, а после вызова перемещать MoveBlock'ом обратно в , разбирая по частям.
Когда будете передавать в функцию кластер TGrdFindInfo, делайте в CLFN тип аргумента (Type) равным Adapt To Type, а формат данных (Data Format) - Handles By Value. в этом случае передает как раз указатель на struct.
Код: Выделить всё
BYTE abyReserved[0x200-0x1A]; // Зарезервировано
Когда будете передавать в функцию кластер TGrdFindInfo, делайте в CLFN тип аргумента (Type) равным Adapt To Type, а формат данных (Data Format) - Handles By Value. в этом случае передает как раз указатель на struct.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение