لا توجد تعريفات للنوع في ملف IDL المحدد مسبقًا
سؤال
أولاً،
استخدام سهل 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.