У меня есть проект Dll с интерфейсами IDL. Я хочу иметь интерфейсы в моей dll, что один из них может быть получен из другого. Я создал два интерфейса с ATL Simple Object Wizard.Как создать два интерфейса ATL, полученных от другого?
[
object,
uuid(7359AF6C-6E90-4372-991F-556602CB3977),
dual,
nonextensible,
pointer_default(unique)
]
interface IZInterface : IDispatch{
[id(1)] HRESULT ZGetStr([out,retval] BSTR* str);
[id(2)] HRESULT GetSize([in,out] LONG* nSize);
};
[
object,
uuid(8CA6DBF2-E402-464D-96AE-3D6642D91E14),
pointer_default(unique)
]
interface IBClass : IUnknown{
[] HRESULT Method11([out,retval] LONG* l);
};
library DllStandardLib
{
importlib("stdole2.tlb");
[
uuid(491DF659-012F-4C20-90AA-0CBC5BDE5A68)
]
coclass ZInterface
{
[default] interface IZInterface;
};
[
uuid(43CE897F-17F2-4D45-9098-26B7AEE6EC23)
]
coclass BClass
{
[default] interface IBClass;
};
};
сейчас, я нажимаю правой кнопкой мыши на CZInterface в представлении класса, а затем в интерфейсе Impelement IBClass.
но в continer, который является # проект C:
DllStandardLib.ZInterface dd = new DllStandardLib.ZInterface();
dd.Method11();//---> Error: DllStandardLib.ZInterface' does not contain a definition for 'Method11' and no extension method 'Method11' accepting a first argument of type ...
что проблема в моем проекте? Я хочу, чтобы второй (производный) интерфейс знал все методы и свойства базового интерфейса. , пожалуйста, помогите мне!
IBClass происходит от IUnknown, а не от IZInterface. Так что, конечно, это не сработает. Мастер ATL не поможет вам это сделать, вам нужно сделать это вручную. Может, не стоит. –