Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Перевод с 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.065 c
15-1340195353
xss22
2012-06-20 16:29
2013.03.22
ziptv для XE


2-1339657502
AntiUser
2012-06-14 11:05
2013.03.22
Как правильно создать наследников фрейма


15-1330713889
wl
2012-03-02 22:44
2013.03.22
Небольшое предложение по улучшению форума


2-1346093178
s_t_d
2012-08-27 22:46
2013.03.22
Как из D-7 открыть Acrobat,?


15-1330604387
upc
2012-03-01 16:19
2013.03.22
Покупка Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский