Написание замены для C DLL?
Я хотел бы написать очень простую замену для w3btrv7.dll, чтобы я мог передавать вызовы Btrieve API в другую библиотеку (написанную в.NET и вызываемую через COM). По сути, мне нужно имитировать сигнатуру функции BTRCALL в C. Однако я не программист на C... вообще. Я думаю, что у меня есть довольно хорошее представление о том, как написать DLL, которая экспортирует функции, но кроме этого, я заблудился.
Основная подпись выглядит так:
int BTRCALL(Operation Code, Position Block, Data Buffer, Data Buffer Length,
Key Buffer, Key Buffer Length, Key Number)
Код операции - целое число
Блок позиции - 128-байтовый массив
Буфер данных - я не могу найти много подробностей об этом, но я предполагаю, что это байтовый массив, длина которого определяется параметром Длина буфера данных.
Длина буфера данных - Опять же, не так много информации, но я предполагаю, что это целое число, которое определяет длину предыдущего байтового массива.
Key Buffer - массив байтов с максимальным размером 255 байтов
Key Buffer Length - длина предыдущего байтового массива
Номер ключа - 2-байтовое целое число
Кто-нибудь может предложить функцию в C, которая соответствует этой подписи?
1 ответ
#include <types.h>
int BTRCALL(int op_code, char pos_block[], char data_buf[], int data_buf_len, char key_buf[], int key_buf_len, int16_t key_num)
Вам нужен тип types.h, чтобы получить тип int16_t, который задает ровно 2-байтовое (подписанное) целое число.
Обратите внимание, что для массивов не указан размер, поэтому размеры должны быть в отдельном параметре или известны априори (как в pos_block).