首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

C++和delphi的HWND有关问题

2012-03-21 
C++和delphi的HWND问题现有一个c++的dll,在c++中调用其中一个函数时这样定义:typedef void *HPLAYERHPLAY

C++和delphi的HWND问题
现有一个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类型么?
急急急。。。。。。。


[解决办法]
var pvParentWnd:thandle 试试
[解决办法]
不懂哈,指针不都是int型嘛
[解决办法]
指针是地址,该函数里的类型是一个指向句柄的地址
delphi因为把api都重新包装了,所以你使用的handle全都是int类型的


[解决办法]
你这么声明:
function PlayerCreate(const szConfigFile:pchar;pvParentWnd:HWND;x:integer;y:integer):HPLAYER;stdcall;external 'T***.dll';

调用:
PlayerCreate(pchar('e:\333.esf'),self.handle,0,0);
就可以了。
[解决办法]
Point和整数本质都是一样的.
HWnd在C++就是被定义成指针的.Delphi的指针虽然不比C++弱.但它倾向于能不用尽量不用
[解决办法]

Delphi(Pascal) code
type  HPLAYER = Pointer;  pHPLAYER = ^HPLAYER;function PlayerCreate(const szConfigFile:pchar;pvParentWnd:pointer;x:integer;y:integer):HPLAYER;stdcall;external 'XXX.dll';{调用时是这样:}m_hPlayer : HPLAYER;m_hPlayer := PlayerCreate(pchar('e:\333.esf'),pointer(@self.handle),0,0);{楼主试试} 

热点排行