+ -
当前位置:首页 → 问答吧 → C++和delphi的HWND问题

C++和delphi的HWND问题

时间:2011-10-20

来源:互联网

现有一个c++的dll,在c++中调用其中一个函数时这样定义:
typedef void *HPLAYER;
HPLAYER STDCALL PlayerCreate(const char *szConfigFile,void * pvParentWnd,int x,int y);
在c++中调用方式为PlayerCreate(NULL, hParent, 0, 0);
其中hParent被定义为HWND,是父窗体的句柄。C++中调用没问题。

  我在delphi中定义这个函数时是这样写的:
type
  HPLAYER = Pointer;
  pHPLAYER = ^HPLAYER;
function PlayerCreate(const szConfigFile:pchar;pvParentWnd:thandle;x:integer;y:integer):HPLAYER;stdcall;external 'XXX.dll';
调用时是这样:
m_hPlayer : HPLAYER;
m_hPlayer := PlayerCreate(pchar('e:\333.esf'),self.handle,0,0);
这样调用有问题,调试时发现m_hPlayer=nil。

各位大大,有没知道这个该怎么样来转啊,为什么c++中的HWND是指针,不是应该都是long类型么?
急急急。。。。。。。

作者: yqfsan   发布时间: 2011-10-20

var pvParentWnd:thandle 试试

作者: bdmh   发布时间: 2011-10-20

不懂哈,指针不都是int型嘛

作者: sdudubing   发布时间: 2011-10-20

指针是地址,该函数里的类型是一个指向句柄的地址
delphi因为把api都重新包装了,所以你使用的handle全都是int类型的

作者: funxu   发布时间: 2011-10-20

C不熟
或者试试
  int: Integer;
  pint: ^Integer;
begin
  int := handle;
  pint := @int;

作者: funxu   发布时间: 2011-10-20

to bdmh:
  报形参与实参必须一致的错

to funxu
  按你的话是要把self.handle转成地址传进去吗?怎么转啊。
  或者能不能把这个delphi的定义改改?

作者: yqfsan   发布时间: 2011-10-20

to funxu
  现在我把pvParentWnd:thandle改成pvParentWnd:pointer
  按你那样试过了,那样传的应该不是父窗体的句柄指针地址,而是那个int的地址,只不过int的值等于self.handle的值。我还试了pointer(self.handle),也不行。
  救命啊。。。。。。

作者: yqfsan   发布时间: 2011-10-20