¿Escribir un reemplazo para una DLL C?
Pregunta
Me gustaría escribir un reemplazo muy simple para w3btrv7.dll para poder pasar las llamadas de API Btrieve a otra biblioteca (escrita en .NET y llamado Via Com). Básicamente, necesito imitar la firma de la función BTRCALL en C. Sin embargo, no soy un programador C ... en absoluto. Creo que tengo una idea bastante buena de cómo escribir una DLL que exporta funciones, pero más allá de eso, estoy perdido.
La firma básica se ve así:
int BTRCALL(Operation Code, Position Block, Data Buffer, Data Buffer Length,
Key Buffer, Key Buffer Length, Key Number)
Código de operación - entero
Bloque de posición - Array de 128 bytes
Buffer de datos - No puedo encontrar muchos detalles sobre esto, pero supongo que es una matriz de bytes cuya longitud es especificada por el parámetro de longitud del búfer de datos.
Longitud del búfer de datos - Nuevamente, no hay mucha información, pero supongo que este es un entero que especifica la longitud de la matriz de bytes anterior.
Búfer de llave - Una matriz de bytes con un tamaño máximo de 255 bytes
Longitud del búfer clave - La longitud de la matriz de bytes anterior
Número clave - Integer de 2 bytes
¿Alguien puede sugerir una función en C que coincida con esta firma?
Solución
#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)
Necesita los tipos.h incluir para obtener el tipo int16_t que especifica un número entero exactamente de 2 bytes (firmado).
Tenga en cuenta cómo las matrices no tienen un tamaño especificado, es por eso que los tamaños tienen que estar en un parámetro separado o conocido a priori (como con POS_BLOCK).