سؤال

كنت أحاول ربط طريقة Winsock2.0 مخصصة لعملية عن بعد، بحيث تنفذ وظيفتي بدلا من واحد في هذه العملية، لقد كنت غوغلق هذا ووجدت بعض مثال جيد حقا، لكنهم يفتقرون إلى الوصف

typedef (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = recv;

الآن سؤالي هو، ماذا يعني هذا، أو هل هذا هو نوع من المؤشر إلى وظيفة Recv () الحقيقية؟

ثم قطعة أخرى من التعليمات البرمجية لوظيفة مخصصة

int WINAPI Cus_Recv( SOCKET s, char *buf, int len, int flags ) 
{
    printf("Intercepted a packet");

    return WSAREC( s, buf, len, flags ); // <- What is this?
}

آسف إذا كانت هذه الأسئلة تبدو أساسية حقا، فقد بدأت فقط في التعلم قبل أسبوعين أو 3 أسابيع. شكرا.

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

المحلول

أين وجدت مثل هذا المثال؟

يحاول الخط الأول تحديد نوع جديد WSAREC، وهو مؤشر له وظيفة له نفس التوقيع recv(). وبعد لسوء الحظ، يحاول أيضا إعلان متغير من هذا النوع لتخزين عنوان recv() وظيفة. الخطأ typeDef غير صحيح لأن الوظيفة تفتقر إلى نوع الإرجاع. لذلك لا يترجم تحت Visual Studio 2003.

قد يكون لديك حظ أكثر باستخدام:

int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;

الذي يعلن فقط متغير من النوع "المؤشر إلى وظيفة"، مما يخزن عنوان recv().

الآن القصاص الثاني هو وظيفة لها نفس التوقيع مثل recv()وظيفة، التي تطبع رسالة، ثم يستدعي الأصلي recv() من خلال مؤشر الوظيفة المعلنة أعلاه.

يظهر الكود هنا فقط كيفية استدعاء وظيفة من خلال مؤشر: لا يحل محل أي شيء في العملية الحالية.

أيضا، لست متأكدا من أنه يمكنك التدخل في عملية أخرى واستبدال وظيفة واحدة في إرادتك. سيكون تهديدا كبيرا لأمن النظام. ولكن لماذا تفعل ذلك في المقام الأول؟

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