Oracle Forms 6i SendMessage with String

时间:2012-08-23 21:59:32

标签: oracle delphi plsql sendmessage

我正在将我的pascal代码转换为PL / SQL以与Oracle Forms 6i一起使用。我的下面的pascal代码非常有效。

program WebcamTest;
//cswi
//www.delphibasics.info
const
  WM_CAP_DRIVER_CONNECT = 1034;
  WM_CAP_GRAB_FRAME = 1084;
  WM_CAP_SAVEDIB = 1049;
  WM_CAP_DRIVER_DISCONNECT = 1035;

function SendMessageA(hWnd: Integer;
                      Msg: Integer;
                      wParam: Integer;
                      lParam: Integer): Integer;
                      stdcall;
                      external 'user32.dll' name 'SendMessageA';

function capGetDriverDescriptionA(DrvIndex: Cardinal;
                                  Name: PAnsiChar;
                                  NameLen: Integer;
                                  Description: PAnsiChar;
                                  DescLen: Integer) : Boolean;
                                  stdcall;
                                  external 'avicap32.dll' name 'capGetDriverDescriptionA';

function capCreateCaptureWindowA(lpszWindowName: PAnsiChar;
                                 dwStyle: Integer;
                                 x : Integer;
                                 y : Integer;
                                 nWidth : Integer;
                                 nHeight : Integer;
                                 ParentWin: Integer;
                                 nId: Integer): Integer;
                                 stdcall;
                                 external 'avicap32.dll' name 'capCreateCaptureWindowA';

function IntToStr(i: Integer): String;
begin
  Str(i, Result);
end;

var
  WebCamId : Integer;
  CaptureWindow : Integer;
  x : Integer;
  FileName : PAnsiChar;
begin
  WebcamId := 0;
  CaptureWindow := capCreateCaptureWindowA('CaptureWindow', 0, 0, 0, 0, 0, 0, 0);
  if CaptureWindow <> 0 then
  begin
    if SendMessageA(CaptureWindow, WM_CAP_DRIVER_CONNECT, WebCamId, 0) = 1 then
    begin
      for x := 1 to 20 do // Take 20 photos.
      begin
        SendMessageA(CaptureWindow, WM_CAP_GRAB_FRAME, 0, 0);
        FileName := PAnsiChar('C:\Test' + IntToStr(x) + '.bmp');
        SendMessageA(CaptureWindow, WM_CAP_SAVEDIB, 0, LongInt(FileName));
      end;
    end;
    SendMessageA(CaptureWindow, WM_CAP_DRIVER_DISCONNECT, 0, 0);
  end;
end.

我已成功使用ora_ffi包翻译了所有apis。

我无法将以下行从Pascal转换为PL / SQL(将捕获的图片保存到FileName标识的指定位置)。

SendMessageA(CaptureWindow, WM_CAP_SAVEDIB, 0, **LongInt**(FileName));

因为我不确定如何将FileName作为PLS_INTEGER传递(请参阅使用pascal实现此目的的粗体),这是SendMessageA定义所需要的。使用pascal,我可以将FileName强制转换为LongInt(这会返回指向FileName的指针吗?如果是这样,我想用PL / SQL模拟这个转换)。

注意:问题是如何将 Pascal 转换为 PL / SQL 。 Pascal代码工作正常。

有什么想法吗?

0 个答案:

没有答案