VC的DLL函数在Delphi中申明使用的问题,涉及到指针(50分)

  • 主题发起人 conanphil
  • 开始时间
C

conanphil

Unregistered / Unconfirmed
GUEST, unregistred user!
原函数提供为
int StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect, BOOLEAN bOverlay, int VideoFormat, int FrameRate);
参数: HANDLE hChannelHandle 通道句柄
HWND WndHandle,窗口句柄
RECT *rect,窗口内的矩型区域
BOOLEAN bOverlay, 打开或关闭Overlay模式预览
int VideoFormat, 视频格式(见2.1节)
int FrameRate 视频帧率
我在Delphi中申明为
type
PTRect = ^TRect;
var
...
StartVideoPreview: function(hChannelHandle:THandle;
WndHandle:HWND;
rect:pTRect;
bOverlay:boolean;
VideoFormat,FrameRate:integer):integer;stdcall;
...
其中rect应该是个指针数组吧?
使用的时候我定义一个
type PTRect = ^TRect;
var area:array[0..3] of PTRECT 想传值进去
area[0].top := 0;
area[0].left := 0;
area[0].right := 176;
area[0].bottom := 144;
area[1].top :=...
...这样赋值的
然后传值的时候
使用StartVideoPreview(ChannelHandle,WindowHWND, area,FALSE, 128, 25);这样的语句
总是编译不通过,说是[Error] Main.pas(83): Incompatible types
由于小弟初次涉及指针(平时不太用的),又是vc转成delphi的使用,有点稀里糊涂的,麻烦谁帮忙看一下哪里出错了吗?在下万分感激
 
这样试试,我改动了两处
var
...
StartVideoPreview: function(hChannelHandle:THandle;
WndHandle:HWND;
var rect:TRect;
bOverlay:boolean;
VideoFormat,FrameRate:integer):integer;stdcall;
...
其中rect应该是个指针数组吧?
使用的时候我定义一个
type PTRect = ^TRect;
var area:array[0..3] of TRECT 想传值进去
area[0].top := 0;
area[0].left := 0;
area[0].right := 176;
area[0].bottom := 144;
area[1].top :=...
 
编译是通过的
但是好像和原函数定义有不符合的地方
功能没办法实现
在vc的源程序里面他是这样调用的
StartVideoPreview(ChannelHandle, /*GetDlgItem(IDC_VIDEOWIN)->m_hWnd*/m_hWnd, &rectList, FALSE, 128, 25)
RECT rectList[MAX_CHANNELS];
赋值语句: for(int i = 0;
i < numRects;
i++){
inRows = i / cols;
inCols = i % cols;
rectList.left = inCols * subRectW;
rectList.top = inRows * subRectH;
rectList.right = rectList.left + subRectW;
rectList.bottom = rectList.top + subRectH;
}
 
学习,谢谢
 
修改如下:
type
PRect = ^TRect;
var
area: array[0..3] of PRECT;

area[0]^.top := 0;
area[0]^.left := 0;
area[0]^.right := 176;
area[0]^.bottom := 144;
 
通过了
汗~
原来delphi里面取指针的地址是@,在area前面加上@就可以了
初次涉及delphi的指针 问的问题实在比较菜 见谅
谢谢楼上各位帮忙
 
多人接受答案了。
 
顶部