سؤال

أرغب في كتابة بديل بسيط للغاية ل W3BTRV7.dll حتى أتمكن من تمرير مكالمات Btrieve API إلى مكتبة أخرى (مكتوبة في .NET وتسميتها عبر COM). في الأساس، أحتاج إلى تقليد توقيع وظيفة BTRCALL في C. ومع ذلك، أنا لست مبرمج C ... على الإطلاق. أعتقد أن لدي فكرة جيدة عن كيفية كتابة DLL التي تصدر وظائفها، ولكن بعد ذلك، فقدت.

التوقيع الأساسي يشبه هذا:

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

رمز العملية - عدد صحيح

موقف كتلة - مجموعة 128 بايت

عازلة البيانات - لا يمكنني العثور على العديد من التفاصيل حول هذا الموضوع، لكنني أفترض أنها صفيف بايت يتم تحديد طولها بواسطة معلمة طول المخزن المؤقت للبيانات.

طول المخزن المؤقت للبيانات - مرة أخرى، ليس الكثير من المعلومات، لكنني أفترض أن هذا صحيح يحدد طول صفيف البايت السابق.

العازلة الرئيسية - صفيف بايت بحجم أقصى 255 بايت

طول المخزن المؤقت - طول الصفيف البايت السابق

رقم المفتاح - عدد صحيح 2 بايت

هل يمكن لأي شخص أن يقترح وظيفة في ج أنه يطابق هذا التوقيع؟

هل كانت مفيدة؟

المحلول

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

تحتاج إلى الأنواع. قم بتضمينها للحصول على نوع Int16_t الذي يحدد عدد صحيح 2 بايت (توقيع).

لاحظ كيف لا تحتوي الصفائف على حجم محدد، ولهذا السبب يجب أن تكون الأحجام في معلمة منفصلة أو معروفة مسبقا (كما هو الحال مع POS_BLOCK).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top