Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Перевод с C++ на Delphi   Найти похожие ветки 

 
Usver   (2012-04-03 21:10) [0]

Доброе время суток. Помогите перевести на Delphi такую структуру:

   MIDL_INTERFACE("C7953E93-2C62-428D-A2F0-4F73F07994DC")
   IUdpMulticast : public IUnknown
   {
   public:
       virtual HRESULT STDMETHODCALLTYPE GetMulticastIp(
           /* [out] */ ULONG *plMip) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetMulticastIp(
           /* [in] */ ULONG lMip) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetNicIp(
           /* [out] */ ULONG *plNip) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetNicIp(
           /* [in] */ ULONG lNip) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetNicIndex(
           /* [in] */ ULONG lNicIndex) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetPort(
           /* [out] */ u_short *psPort) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetPort(
           /* [in] */ u_short sPort) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetAudioPid(
           /* [out] */ u_short *piApid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetAudioPid(
           /* [in] */ u_short iApid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetVideoPid(
           /* [out] */ u_short *piVpid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetVideoPid(
           /* [in] */ u_short iVpid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetSubtitlesPid(
           /* [out] */ u_short *piSpid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetSubtitlesPid(
           /* [in] */ u_short iSpid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetRecFile(
           /* [in] */ TCHAR *p_tcFile_name) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetSrcFile(
           /* [in] */ TCHAR *p_tcFile_name) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE ConfigureDemultiplexer(
           /* [in] */ u_short video_pid,
           /* [in] */ u_short audio_pid,
           /* [in] */ u_short subtitle_pid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE ReportRenderingSuccess(
           /* [in] */ BYTE pin_code) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetParsedData(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [out] */ interop_piddetails_t *p_det) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetProgCount(
           /* [out] */ int *count) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetPidCount(
           /* [in] */ int prog_index,
           /* [out] */ int *count) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetSubDesc(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [in] */ int sub_index,
           /* [out] */ subtitling_t *subdesc) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetTtxDesc(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [in] */ int ttx_index,
           /* [out] */ teletext_ebu_t *ttxdesc) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetVideoInfo(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [out] */ pesvideodet_t *vidinfo) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetAudioInfo(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [out] */ pesaudiodet_t *audinfo) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetPATPid(
           /* [in] */ int prog_index,
           /* [out] */ u_short *prog_num,
           /* [out] */ u_short *pat_pid) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetPMTType(
           /* [in] */ int prog_index,
           /* [in] */ int pid_index,
           /* [out] */ u_short *pid,
           /* [out] */ int *type) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SetMode(
           /* [in] */ BYTE mode) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE ServicesCount(
           /* [out] */ int *count) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE GetServiceDescriptor(
           /* [in] */ int index,
           /* [out] */ unsigned char *provider,
           /* [out] */ unsigned char *name,
           /* [out] */ u_short *prog) = 0;
       
       virtual HRESULT STDMETHODCALLTYPE SendPTSToH264Dec(
           /* [in] */ BOOL set) = 0;
       
   };


 
Usver   (2012-04-03 21:12) [1]

Вот что я наваял, но глючит, не пойму, куда копать...

    IUdpMulticast=interface(IUnknown)
       ["{C7953E93-2C62-428D-A2F0-4F73F07994DC}"]
          function QueryInterface(const iid:tguid;out obj):hresult;stdcall;
          function _AddRef:integer;stdcall;
          function _Release:integer;stdcall;
          function GetMulticastIp(out addr:ulong):hresult;stdcall;
          function SetMulticastIp(addr:ulong):hresult;stdcall;
          function GetNicIp(out addr:ulong):hresult;stdcall;
          function SetNicIp(addr:ulong):hresult;stdcall;
          //function SetNicIndex(index:ulong):hresult;stdcall;
          function GetPort(out port:u_short):hresult;stdcall;
          function SetPort(port:u_short):hresult;stdcall;
          function GetAudioPid(out pid:u_short):hresult;stdcall;
          function SetAudioPid(pid:u_short):hresult;stdcall;
          function GetVideoPid(out pid:u_short):hresult;stdcall;
          function SetVideoPid(pid:u_short):hresult;stdcall;
          function GetSubtitlesPid(out pid:u_short):hresult;stdcall;
          function SetSubtitlesPid(pid:u_short):hresult;stdcall;
          function SetRecFile(filename:pwidechar):hresult;stdcall;
          function SetSrcFile(filename:pwidechar):hresult;stdcall;
          function ConfigureDemultiplexer(vidpid:u_short;audpid:u_short;subpid:u_short):hresult;std call;
          function ReportRenderingSuccess(pin:byte):hresult;stdcall;
          function GetParsedData(prog:integer;pid:integer;out sub:interop_piddetails_t):hresult;stdcall;
          function GetProgCount(out count:integer):hresult;stdcall;
          function GetPidCount(prog:integer;out count:integer):hresult;stdcall;
          function GetSubDesc(prog:integer;pid:integer;sub:integer;out desc:subtitling_t):hresult;stdcall;
          function GetTtxDesc(prog:integer;pid:integer;ttx:integer;out desc:teletext_ebu_t):hresult;stdcall;
          function GetVideoInfo(prog:integer;pid:integer;out info:pesvideodet_t):hresult;stdcall;
          function GetAudioInfo(prog:integer;pid:integer;out info:pesaudiodet_t):hresult;stdcall;
          function GetPATPid(prog:integer;out prog_num:u_short;out pat:u_short):hresult;stdcall;
          function GetPMTType(prog:integer;pid:integer;out outpid:u_short;out outtype:integer):hresult;stdcall;
          function SetMode(mode:byte):hresult;stdcall;
          function ServicesCount(out count:integer):hresult;stdcall;
          function GetServiceDescriptor(index:integer;out provider:byte;out name:byte;out prog:u_short):hresult;stdcall;
          function SendPTSToH264Dec(send:bool):hresult;stdcall;
end;


 
DVM ©   (2012-04-03 22:51) [2]

Как интерфейс может глючить?


 
Usver   (2012-04-04 06:15) [3]

Ошибки чтения памяти вылетают :-(


 
han_malign   (2012-04-04 08:25) [4]

с какого бодуна ты там QueryInterface, _AddRef и _Release продублировал?
и SetNicIndex - не стоит комментировать, интерфейс должен совпадать один к одному(бинарно) - это тебе не IDispatch.Invoke...


 
Usver   (2012-04-04 08:36) [5]

Если я убираю методы интерфейса, то вообще ни одна функция не выполняется. А SetNicIndex заремарен, потому что с ним тоже всё глючит. Я уже всяко перепробовал - не получается, может типы не все правильно интерпретировал...


 
han_malign   (2012-04-04 08:43) [6]

как ты указатель на интерфейс получаешь?


 
Usver   (2012-04-04 09:09) [7]

const clsid_udp:tguid="{C7953E93-2C62-428D-A2F0-4F73F07994DC}";

var udpconf=IUdpMulyicast;

QueryInterface(clsid_udp,udpconf);

Это интерфейс фильтра DirectShow


 
Usver   (2012-04-04 09:23) [8]

Всё, заработало. Спасибо <han_malign> за наводки...


 
Cobalt ©   (2012-04-04 09:24) [9]

а если поменять stdcall на cdecl?


 
Usver   (2012-04-04 09:31) [10]

В C++ написано STDMETHODCALLTYPE - это разве не stdcall в Delphi?


 
Ega23 ©   (2012-04-04 10:30) [11]


> STDMETHODCALLTYPE - это разве не stdcall в Delphi?


Пока нет пруфлинка - это НЕХ.


 
han_malign   (2012-04-04 10:54) [12]


> const clsid_udp:tguid="{C7953E93-2C62-428D-A2F0-4F73F07994DC}";
> .....
> QueryInterface(clsid_udp,udpconf);

- семантически правильнее так:  QueryInterface(IUdpMulticast, udpconf)
(магия)

> а если поменять stdcall на cdecl?

- это редко, там обычно, если засада - то полная - обертку на Ц-шный __thiscall приходится делать...



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.132 c
4-1263784073
SPeller
2010-01-18 06:07
2013.03.22
Синхронные вызовы Read/WriteFile при FILE_FLAG_OVERLAPPED


2-1344332083
ramster
2012-08-07 13:34
2013.03.22
юникод DelphiXE


2-1342945485
Ярослав
2012-07-22 12:24
2013.03.22
Склейка формы


15-1342009409
alexdn
2012-07-11 16:23
2013.03.22
Скроллинг страницы


15-1349688217
oxffff
2012-10-08 13:23
2013.03.22
Управление памятью в Delphi