لا توجد تعريفات للنوع في ملف IDL المحدد مسبقًا

StackOverflow https://stackoverflow.com/questions/431206

  •  08-07-2019
  •  | 
  •  

سؤال

أولاً،

استخدام سهل C++، بدون ATL، يحاول MFC استخدام واجهة كائن COM.

استخدام oleview (OLE/COM Object viewer) - يستخدم لهندسة كود IDL.

في هذه المرحلة باستخدام ميدل مترجم، الآن أواجه مشكلة في محاولة إنتاج ما يلي:

بناء الجملة على سطر cmd:

midl /nologo /env win32 /tlb ".\S8_.tlb" /h ".\S8_.h" /iid ".\S8_i.c" S8.idl

  • .TLB المطابق (مكتبة النوع)
  • أ.ح (الرأس)
  • تتضمن تعريفات IID الملف (*_i.c)
  • الوكيل (*_p.c)

خطأ مترجم MIDL:

S8.IDL(513):خطأ MIDL2025:خطأ في بناء الجملة :توقع مواصفات النوع بالقرب من "S8SimObject"

    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
هل كانت مفيدة؟

المحلول 2

خطأ مترجم MIDL

S8.IDL(513): خطأ MIDL2025 :خطأ في بناء الجملة :نتوقع مواصفات نوع قريب "S8SimObject"

تم حلها

أضف إعلان إلى الأمام - في أعلى ملف IDL:

  • استيراد "ocidl.idl"؛
  • واجهة S8SimObject؛

نصائح أخرى

حسنًا، لا أفهم حقًا سؤالك هنا، ولكن من المفترض أن يساعد ما يلي:

  • يجب أن يكون لتعريفات التعداد العام تعريفات خاصة بها uuid أن تكون عامة حقا.
  • لقد رأيت أن تعريفات التعداد هذه لا تدخل في مكتبة النوع إلا إذا تم استخدامها فعليًا في بعض طرق الواجهة.لا أعرف سبب ذلك، ربما فاتني شيء بسيط (مثل إضافة هذا التعداد إلى كتلة المكتبة، أو أي شيء آخر).
  • short عادةً ما تعني عددًا صحيحًا قصيرًا، وليس رقمًا عائمًا ذو دقة واحدة.
  • أي ما يعادل float يكون single في VB، ولكن كما رأيت في الأسئلة الأخرى الخاصة بك، أظن أنك تقصد الاستبدال بالفعل single مع float.

بالمناسبة، أوصي بنشر ملف IDL صغير (قابل للتجميع) (مجرد من معظم التعريفات)، والذي يشبه إلى حد ما ما تحاول تجميعه.وهذا يساعد على تجنب بعض الالتباس، كما تستخدمه على سبيل المثال IS8Simulation في النص الخاص بك، ولكن S8SimObject في مقتطف IDL المنسوخ.وسيكون من المفيد أيضًا تحديد النتيجة المتوقعة والخطأ غير المتوقع (بالنسبة لك).

يحرر

حسنًا، خطأ الترجمة هذا الذي أدخلته الآن بسيط: S8SimObject غير محدد.يجب عليك دائمًا الرجوع إلى الواجهة في إعلانات الطريقة (IS8Simulation)، أبدًا إلى coclass الذي ينفذ الواجهة.

كما قلت أنك تقوم بتغيير ملف IDL موجود هنا:ما هو الهدف الأساسي؟إذا كان ملف IDL الأصلي يستخدم دائمًا S8SimObject, ربما المشكلة الوحيدة هي أن تعريف S8SimObject لم يتم تضمينه في الجزء العلوي من ملف IDL؟إذا كان لديك تعريف مكتبة النوع S8SimObject حول، يمكنك تصدير IDL لهذه الواجهة باستخدام OleView.

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