سؤال

لا توجد مراجع ثابتة في إعلانات طريقة MIDL ؟؟؟؟

على سبيل المثال.

[id(1), helpstring("My Method")]
HRESULT MyMethod(
    [in] IID & const rclsid
);

ل

HRESULT MyMethod(
    IID const &rclsid
);
هل كانت مفيدة؟

المحلول

لا يدعم MIDL المعلمات المرجعية حقًا ، فهو يدعم فقط "في" و "Out". لذا ، إذا قمت بتمرير مرجع ، فهو مجرد سكر نحوي لمؤشر إلى القيمة (المشكلة هي قابلية الملاحظة - إذا كان لديك وظيفة رد اتصال أو واجهة في توقيع طريقتنا ، فإن التغييرات إلى مرجع يمكن ملاحظتها من رد الاتصال ، ولكن التغييرات على المعلمة [OUT] غير مرئية حتى تعود الوظيفة.

بالإضافة إلى ذلك ، فقد الفرق بين "& const" و "const &". إذا نظرت إلى تعريف refguid ، فسترى أنها تستخدم فقط نموذجًا واحدًا من "const" لرمز C ++:

#ifdef __midl_proxy
#define __MIDL_CONST
#else
#define __MIDL_CONST const
#endif

#ifndef _REFGUID_DEFINED
#define _REFGUID_DEFINED
#ifdef __cplusplus
#define REFGUID const GUID &
#else
#define REFGUID const GUID * __MIDL_CONST
#endif
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top