前の日 / 次の日 / 最新 / 2008-06

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2008-06-13 Fri

IDL を D言語 に [D言語]

IDL

interface IUPnPDeviceFinder : IDispatch
{
    ...
    HRESULT FindByType([in] BSTR bstrTypeURI,
                       [in] DWORD dwFlags,
                       [out, retval] IUPnPDevices ** pDevices);
    ...

この COM を D からつかうのに、

IUPnPDeviceFinder : IDispatch
{
    ...
    HRESULT FindByType(BSTR bstrTypeURI,
                       DWORD dwFlags,
                       IUPnPDevices ** pDevices);
    ...
}
    IUPnPDevices devices;
    FindByType(cast(IUPnPDevices**)&devices);

と、

IUPnPDeviceFinder : IDispatch
{
    ...
    HRESULT FindByType(BSTR bstrTypeURI,
                       DWORD dwFlags,
                       IUPnPDevices * pDevices);
    ...
}
    IUPnPDevices devices;
    FindByType(&devices);

のどちら良いのだろう?

両方とも 実行時エラーは出ていない。
たまたまだろうか?

前者は、キャストが疑問。
後者は、IDL と違う宣言。