2009-08-16 1 views
1

私はW3btrv7.dllの非常に簡単な置き換えを書いて、Btrieve API呼び出しを別のライブラリ(.NETで書かれ、COM経由で呼び出される)に渡すことができます。基本的には、CでBTRCALL関数のシグネチャを模倣する必要があります。しかし、私はCプログラマではありません。私は関数をエクスポートするDLLを書く方法についてかなり良い考えがあると思うが、それを超えて、私は失われている。C DLLの置き換えを記述していますか?

基本的なシグネチャは次のようになります。

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

オペレーションコード - 整数

ポジションブロックから128バイト配列

データバッファ - 私は見つけることができませんこれについては多くの詳細がありますが、データバッファ長パラメータで長さが指定されたバイト配列であると仮定します。

データバッファーの長さ - ここでも、あまり情報はありませんが、前のバイト配列の長さを指定する整数と見なします。

キーバッファ - 以前バイト配列

キー番号の長さ - - 255バイト

キーバッファ長の最大サイズがバイト配列2バイト整数

誰もこの署名と一致するCの関数を提案できますか?

答えて

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) 

正確に2バイト(符号付き)の整数を指定するint16_t型を取得するには、types.hインクルードが必要です。

配列のサイズが指定されていないことに注意してください。そのため、サイズは別々のパラメータにするか、先験的に(pos_blockのように)知らなければなりません。

+0

types.hを含めるのを避けたい場合は、int16_tの代わりにshort型(またはunsigned short型)を使用できます。 – cedrou

+1

@cedrou shortは、少なくとも* 2バイト以上で、intより大きくないことが保証されていますが、*正確に* 2バイトであることは保証されていません。 –

+0

完璧!ありがとう! –

関連する問題