Autor Beitrag
bbfan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 20.10.10 11:20 
Hallo Leute,

ich bin von D7 auf D2009 gewechselt. Jetzt funktioniert die alte TVideoCapture vcap.pas nicht mehr.
Leider konnte ich keine Alternative dafür finden.

Ziel: Einfaches auslesen der Bildauflösungen einer WebCam

vg
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 20.10.10 11:37 
Warum funktioniert sie nicht mehr? Fehlermeldung irgendwelcher Art oder dreht sich die Unit einfach um und schläft weiter wenn du sie ansprichst?

lg elundil

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 20.10.10 15:19 
Also die vcap.pas greift auf die DirectDraw.pas zu.

Diese produziert eine Menge Fehler.
Fehler 1: "IdirectdrawSurface benötigt Finalization - nicht im Variant Record erlaubt"

ausblenden Delphi-Quelltext
1:
 lpDDSZBufferDest            : PDirectDrawSurface;					


PDirectDrawSurface ist ein IDirectDrawSurface.
Eigentlich sollte es hiermit umgangen werden, scheint aber nicht zu klappen unter D2009

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
{$IFDEF COMPILER5_UP}
  PDirectDrawSurface = Pointer;
{$ELSE}
  PDirectDrawSurface = IDirectDrawSurface;
{$ENDIF}
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 20.10.10 15:59 
Gut ich bin jetzt einen Schritt weiter und in der dxcommon.pas angelangt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function IsNTandDelphiRunning : boolean;
var
  OSVersion  : TOSVersionInfo;
  AppName    : array[0..255of char;
begin
  OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
  GetVersionEx(OSVersion);
  // Not running in NT or program is not Delphi itself ?
  AppName[0] := #0;
  lstrcat(AppName, PChar(ParamStr(0)));  // ParamStr(0) = Application.ExeName
  CharUpperBuff(AppName, SizeOf(AppName));
  result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
              (Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE') + 1) );
end;

In der Zeile die fett gedruckt ist kommt beim Starten der Anwendung zu einer kernel Schutzverletzung.
Kompilieren klappt jetzt wieder.


Moderiert von user profile iconMartok: [b]-Tag durch highlight ersetzt
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 20.10.10 16:30 
Ich habe das angegebene wie folgt umschifft:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function IsNTandDelphiRunning : boolean;
var
  OSVersion  : TOSVersionInfo;
  AppName    : array[0..255of char;
  ProgName:String;
begin
  OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
  GetVersionEx(OSVersion);
  // Not running in NT or program is not Delphi itself ?
  AppName[0] := #0;
  lstrcat(AppName, PChar(ParamStr(0)));  // ParamStr(0) = Application.ExeName
//  AnsiUpperCase(AppName, SizeOf(AppName));
  ProgName:=AnsiUpperCase(AppName);
  result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
              (Pos('DELPHI32.EXE', ProgName) = Length(ProgName) - Length('DELPHI32.EXE')) );
end;


Wobei der pos Vergleich mit delph32.exe für mich keinen Sinn macht, denn ParamStr(0) enthält meinen EXE Namen. Dann müsste ich also
einen delphi32.exe kompilieren. Was soll diese komische 2. Bedingung, die NIE erfüllt sein wird.