Написание замены для 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).

Другие вопросы по тегам