Форум: "Начинающим";
Текущий архив: 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.107 c