2009-08-16 6 views
1

Je voudrais écrire un remplacement très simple pour w3btrv7.dll afin que je puisse passer des appels API Btrieve à une autre bibliothèque (écrit en .NET et appelé via COM). Fondamentalement, je dois imiter la signature de la fonction BTRCALL en C. Cependant, je ne suis pas un programmeur C ... du tout. Je pense que j'ai une assez bonne idée de comment écrire une DLL qui exporte des fonctions, mais au-delà, je suis perdu.Écriture d'un remplacement pour une DLL C?

La signature de base ressemble à ceci:

int BTRCALL(Operation Code, Position Block, Data Buffer, Data Buffer Length, 
     Key Buffer, Key Buffer Length, Key Number) 

Opération Code - entier

Position Bloc - tableau de 128 octets

tampon de données - Je ne peux pas trouver Beaucoup de détails à ce sujet, mais je suppose que c'est un tableau d'octets dont la longueur est spécifiée par le paramètre Data Buffer Length.

Longueur du tampon de données - Encore une fois, pas beaucoup d'informations, mais je suppose que c'est un entier qui spécifie la longueur du tableau d'octets précédent.

Key tampon - Un tableau d'octets avec une taille maximale de 255 octets

tampon Key Longueur - La longueur du tableau d'octets précédente

Key Number - nombre entier de 2 octets

Quelqu'un peut-il suggérer une fonction en C qui correspond à cette signature?

Répondre

0
#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) 

Vous avez besoin du types.h comprennent pour obtenir le type de int16_t qui spécifie un nombre entier de 2 octets exactement (signé).

Notez que les tableaux n'ont pas de taille spécifiée, c'est pourquoi les tailles doivent être dans un paramètre séparé ou connu a priori (comme avec pos_block).

+0

Si vous voulez éviter d'inclure types.h, vous pouvez utiliser le type short (ou unsigned short) au lieu de int16_t. – cedrou

+1

@cedrou Un court-circuit est garanti être * au moins * 2 octets, et aussi pas plus grand que int, mais il n'est pas garanti d'être * exactement * deux octets. –

+0

Parfait! Merci! –