tags:

views:

140

answers:

1

I'd like to write a very simple replacement for w3btrv7.dll so I can pass Btrieve API calls to another library (written in .NET and called via COM). Basically, I need to mimic the signature of the BTRCALL function in C. However, I'm not a C programmer... at all. I think I have a pretty good idea of how to write a DLL that exports functions, but beyond that, I'm lost.

The basic signature looks like this:

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

Operation Code - integer

Position Block - 128 byte array

Data Buffer - I can't find many details about this, but I assume it's a byte array whose length is specified by the Data Buffer Length parameter.

Data Buffer Length - Again, not much information, but I assume this is an integer that specifies the length of the previous byte array.

Key Buffer - A byte array with a maximum size of 255 bytes

Key Buffer Length - The length of the previous byte array

Key Number - 2-byte integer

Can anyone suggest a function in C that matches this signature?

A: 
#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)

You need the types.h include to get the int16_t type that specifies an exactly 2-byte (signed) integer.

Note how the arrays don't have a size specified, that's why the sizes have to be in a separate parameter or known a priori (as with pos_block).

Tyler McHenry
If you want to avoid to include types.h, you can use the type short (or unsigned short) instead of int16_t.
cedrou
@cedrou A short is guaranteed to be *at least* 2 bytes, and also no bigger than int, but is not guaranteed to be *exactly* two bytes.
Tyler McHenry
Perfect! Thanks!
David Brown