Scrivendo un sostituto per una DLL C?
Domanda
Mi piacerebbe scrivere un semplice sostituto per w3btrv7.dll in modo da poter passare le chiamate alle API Btrieve ad un'altra libreria (scritto in .NET e chiamata tramite COM). Fondamentalmente, ho bisogno di imitare la firma della funzione BTRCALL in C. Tuttavia, io non sono un programmatore C ... a tutti. Credo di avere una buona idea di come scrivere una DLL che esporta le funzioni, ma oltre a questo, mi sono perso.
La firma di base assomiglia a questo:
int BTRCALL(Operation Code, Position Block, Data Buffer, Data Buffer Length,
Key Buffer, Key Buffer Length, Key Number)
Codice Operazione - intero
posizione del blocco - 128 array di byte
Dati Buffer -. Non riesco a trovare molti dettagli su questo, ma suppongo che sia un array di byte la cui lunghezza è specificato dal parametro lunghezza buffer dati
Buffer dati Lunghezza - Anche in questo caso, non molte informazioni, ma si presuppone che questo è un numero intero che specifica la lunghezza della matrice di byte precedente
.Key Buffer - Una matrice di byte con una dimensione massima di 255 byte
Chiave Buffer Length - La lunghezza del array di byte precedente
Numero chiave - integer a 2 byte
Qualcuno può suggerire una funzione in C che corrisponde a questa firma?
Soluzione
#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)
È necessario il types.h includono per ottenere il tipo int16_t che specifica un esattamente 2 byte (firmato) intero.
Si noti come gli array non hanno una dimensione specificata, è per questo che le dimensioni devono essere in un parametro a parte o conosciuto a priori (come con pos_block).