Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
Delphi 2005 Personal
|
Re: Programm läuft nicht auf anderen Computern
19. Mär 2006, 16:27
Zitat:
Hallo,
Hört sich ja merkwürdig an, dein Problem.
Kann es sein das du auf irgendwelche Fremdroutinen zugreifst die auf den anderen Rechnern schlicht nicht vorhanden sind?
Ich kann mir schlecht vorstellen das du das nicht machst, da eine Standalone Mediacenteranwendung ziemlich schwer zu realisieren sein dürfte.
Gruß
Ich verwende eine Komponente die in Delphi nicht enthalten ist. Es kann sein das die auf Fremdroutinen zugreift. Meines wissens nach sind, die Routinen für die Komonente, aber in der Bass.dll die sich im Programmordner befindet. Dann verwende ich noch zwei Routinen aus einer "Drive.dll" die ist aber auch im Programmordner. Sonst wüsste ich keine anderen Routinen auf die das Programm zugreift, aber ich schaue mal nach.
Nachtrag:
Ich habe gesucht und keinen Fehler gefunden. Wohlmöglich liegt es an der "Drive.dll" die ich mir mal zusammengetragen habe. Es kann ja sein dass diese ein Fehler enthält. Ihr könnt sie euch ja mal anschauen
Delphi-Quellcode:
library Drive;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, MMSystem;
{$R *.res}
function LockDrive(ADriveLetter: Char; ALock: Boolean): Boolean;
var LWStatus: Hwnd;
LTemp: Cardinal;
LPMR32: Boolean;
Const IOCTL_STORAGE_MEDIA_REMOVAL = $2D4804;
begin
LwStatus := CreateFile(PChar('\\.\' + ADriveLetter + ':'),GENERIC_READ Or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
LPMR32 := ALock;
If LwStatus <> INVALID_HANDLE_VALUE Then
begin
result := DeviceIoControl(LwStatus, IOCTL_STORAGE_MEDIA_REMOVAL, @LPMR32, sizeof(LPMR32), nil, 0, LTemp, nil);
CloseHandle(LwStatus);
end else result := False;
end;
function DriveName(DriveChar: Char): string;
var
OldErrorMode : Integer;
NotUsed, VolFlags : DWORD;
Buf : array [0..MAX_PATH] of Char;
begin
OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
GetVolumeInformation(PChar(DriveChar + ':\'), Buf,
sizeof(Buf), nil, NotUsed, VolFlags,
nil, 0);
Result := Format('%s', [Buf]);
finally
SetErrorMode(OldErrorMode);
end;
end;
function GetDiskIn(Drive: Char): Boolean;
var
ErrorMode: word;
DriveNumber: Integer;
begin
{Meldung eines kritischen Systemfehlers vehindern}
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
DriveNumber := Ord(Drive) - 64;
if DiskSize(DriveNumber) = -1 then
Result := False
else
Result := True;
finally
{ErrorMode auf den alten Wert setzen}
SetErrorMode(ErrorMode);
end;
end;
function OpenCD(Drive: String): Boolean;
var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWORD;
S: string;
DeviceID: Word;
begin
Result := False;
S := Drive + ':';
Flags := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
with OpenParm do
begin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
if Res <> 0 then Exit;
DeviceID := OpenParm.wDeviceID;
try
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
if Res = 0 then Exit;
Result := True;
finally
mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
end;
end;
function CloseCD(Drive: String): Boolean;
var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWORD;
S: string;
DeviceID: Word;
begin
Result := False;
S := Drive + ':';
Flags := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
with OpenParm do
begin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
// if Res <> then Exit;
DeviceID := OpenParm.wDeviceID;
try
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
if Res = 0 then Exit;
Result := True;
finally
mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
end;
end;
exports
LockDrive name 'LockDrive',
DriveName name 'DriveName',
GetDiskIn name 'GetDiskIn',
CloseCD name 'CloseCD',
OpenCD name 'OpenCD';
end.
Robin W. Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
|