Вопрос
Я хотел бы написать очень простую замену для w3btrv7.dll, чтобы я мог передать вызовы API Btrieve в другую библиотеку (написанную в .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 байтовых массивов
Буфер данных - Я не могу найти много подробностей об этом, но я предполагаю, что это массив байтов, длина которого определяется параметром длины буфера данных.
Длина буфера данных - Опять же, не так много информации, но я предполагаю, что это целое число, которое указывает длину предыдущего байтового массива.
Ключевой буфер - байтовый массив с максимальным размером 255 байтов
Ключевая длина буфера - длина предыдущего байтового массива
Ключевой номер - 2-байтовое целое число
Кто -нибудь может предложить функцию в C, которая соответствует этой подписи?
Решение
#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)
Вам нужны типы. H Включите, чтобы получить тип int16_t, который определяет ровно 2-байтовое (подписанное) целое число.
Обратите внимание, как массивы не имеют указанного размера, поэтому размеры должны находиться в отдельном параметре или известно априори (как с Pos_block).