问一个比较菜鸟的directshow的问题

qzmp_sc 2009-08-19 03:46:46
VC中的这几句如何转换为delphi
WCHAR wsz[128];
wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);

...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzmp_sc 2009-08-19
  • 打赏
  • 举报
回复
非常感谢楼上两位的解答,结贴
yktd26 2009-08-19
  • 打赏
  • 举报
回复

function AddGraphToRot(Graph: IFilterGraph; out ID: integer): HRESULT;
var
Moniker: IMoniker;
ROT : IRunningObjectTable;
wsz : WideString;
begin
result := GetRunningObjectTable(0, ROT);
if (result <> S_OK) then exit;
wsz := format('FilterGraph %p pid %x',[pointer(graph),GetCurrentProcessId()]);
result := CreateItemMoniker('!', PWideChar(wsz), Moniker);
if (result <> S_OK) then exit;
result := ROT.Register(0, Graph, Moniker, ID);
Moniker := nil;
end;
qzmp_sc 2009-08-19
  • 打赏
  • 举报
回复
HRESULT CFilterGraph::AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
IMoniker * pMoniker;
IRunningObjectTable *pROT;
if (FAILED(GetRunningObjectTable(0, &pROT))) {
return E_FAIL;
}
WCHAR wsz[128];

wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
if (SUCCEEDED(hr)) {
hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
pMoniker->Release();
}
pROT->Release();
return hr;
}



这个函数总是转换错误,我的转换的代码:
function cFilterGraph.AddGraphToRot(pUnkGraph : IUnknown; pdwRegister : PDWord) : HRESULT;
const
Blah: PWideChar = '!';
var
pMoniker : IMoniker; // IMoniker * pMoniker;
pRot : IRunningObjectTable; // IRunningObjectTable *pROT;
ws : WideString;
dFlag, dReg : Integer;
hr : HRESULT;
begin
if FAILED(GetRunningObjectTable(0, pRot)) then
begin
Result := E_FAIL;
Exit;
end;
ws := WideFormat('FilterGraph %p pid %.8x', [Pointer(pUnkGraph), GetCurrentProcessId]);
hr := CreateItemMoniker(Blah, Pointer(ws), pMoniker);
if FAILED(hr) then
begin

end;
dFlag := 0;
dReg := pdwRegister^;
hr := pROT.Register(dFlag, UnkGraph, pMoniker, dReg);
if FAILED(hr) then
begin

end;
pMoniker._Release;//pMoniker->Release();
pROT._Release; //pROT->Release();
Result := hr;
end;
代码在函数执行完的时候出错,主要问题应该是产生在hr := CreateItemMoniker(Blah, Pointer(ws), pMoniker);这句。貌似pMoniker的指针不对,还是不太清楚。
mjp1234airen4385 2009-08-19
  • 打赏
  • 举报
回复
不会
qzmp_sc 2009-08-19
  • 打赏
  • 举报
回复
非常感谢,先测试一下
Seamour 2009-08-19
  • 打赏
  • 举报
回复
const
Blah: PWideChar = '!';
var
ws: WideString;
hr: HRESULT;
begin
ws := WideFormat('FilterGraph %p pid %.8x', [Pointer(pUnkGraph), GetCurrentProcessId]);
hr := CreateItemMoniker(Blah, Pointer(ws), @pMoniker);
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧