سؤال
لا توجد مراجع ثابتة في إعلانات طريقة 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
لا تنتمي إلى StackOverflow