I need to use external dll to communicate with digital camera and I found program with appropriate dll that enable communication.
In dll description I found function that suits my needs. Looks like this
//--------------------------------------------------------------------
// ReleaseShutter()
// Inputs:
// timeOutInSecs timeout in secs to wait for picture to be
// taken and downloaded (max 60 secs)
// pszFilename option string in which to store the name of the
// saved image. Set to NULL if not required
// numChars length of pszFilename if defined
//
// Returns:
// 0 - Success, image saved
// 1 - PSRemote is not running
// 2 - PSRemote is running but camera is not connected
// 3 - Camera is busy
// 4 - Timeout waiting for image to be saved
// 5 - Error releasing shutter
//
// Description:
// Take a picture and optionally wait for it to be saved to disk.
//
//--------------------------------------------------------------------
PSRemoteLIB_API int __stdcall ReleaseShutter(
int timeoutInSecs,
char* pszFilename,
int numChars
);
Ok, I load dll, use function an get status and external program takes a picture but
I CAN NOT GET FILENAME BACK!!!!
Here is my code
procedure TForm1.Button2Click(Sender: TObject);
var
Status: Integer;
Name1: PChar;
DLLHandle: Thandle;
TakePic: Function (T: Integer; Nam: Pchar;Num:Integer):Integer; {$IFDEF WIN32} stdcall; {$ENDIF}
begin
DLLHandle := LoadLibrary('PSRemoteLib.dll');
if DLLHandle >= 32 then { success }
begin
Name1:=stralloc(1024);
Slikaj := GetProcAddress(DLLHandle, 'ReleaseShutter');
Status:=TakePic(60,Name1,SizeOf(Name1));
edit1.Text:
label1.Caption:=intTostr(Status);
label2.Caption:=Name;
FreeLibrary(DLLHandle);
end
else
MessageDlg('Error: could not find PSRemoteLib.dll', mtError, [mbOk], 0);
StrDispose(Name1);
end;
What I do wrong ???? In the sample .exe that comes with dll and runs in cmd mode this works fine !!!! Program takes picture and report filename ????
I have a sample source code and looks like this
// take a single shot and report the filename/status
char filename[256];
int status = ReleaseShutter(60, filename, sizeof(filename));
switch(status)
{
case 0: // success
if (filename && strlen(filename))
{
cout << "Success, image saved as: " << filename << endl;
}
else
{
cout << "Success, image saved on CF card?" << endl;
}
break;
case 1:
cerr << "PSRemote is not running" << endl;
break;
case 2:
cerr << "Camera is not connected" << endl;
break;
case 3:
cerr << "Camera is busy" << endl;
break;
case 4:
cerr << "Timeout waiting for image to be saved" << endl;
break;
default:
cerr << "ERROR: unexpected return status: " << status << endl;
}
}
return nRetCode;
}
PLEASE HELP !!!
In dll description I found function that suits my needs. Looks like this
//--------------------------------------------------------------------
// ReleaseShutter()
// Inputs:
// timeOutInSecs timeout in secs to wait for picture to be
// taken and downloaded (max 60 secs)
// pszFilename option string in which to store the name of the
// saved image. Set to NULL if not required
// numChars length of pszFilename if defined
//
// Returns:
// 0 - Success, image saved
// 1 - PSRemote is not running
// 2 - PSRemote is running but camera is not connected
// 3 - Camera is busy
// 4 - Timeout waiting for image to be saved
// 5 - Error releasing shutter
//
// Description:
// Take a picture and optionally wait for it to be saved to disk.
//
//--------------------------------------------------------------------
PSRemoteLIB_API int __stdcall ReleaseShutter(
int timeoutInSecs,
char* pszFilename,
int numChars
);
Ok, I load dll, use function an get status and external program takes a picture but
I CAN NOT GET FILENAME BACK!!!!
Here is my code
procedure TForm1.Button2Click(Sender: TObject);
var
Status: Integer;
Name1: PChar;
DLLHandle: Thandle;
TakePic: Function (T: Integer; Nam: Pchar;Num:Integer):Integer; {$IFDEF WIN32} stdcall; {$ENDIF}
begin
DLLHandle := LoadLibrary('PSRemoteLib.dll');
if DLLHandle >= 32 then { success }
begin
Name1:=stralloc(1024);
Slikaj := GetProcAddress(DLLHandle, 'ReleaseShutter');
Status:=TakePic(60,Name1,SizeOf(Name1));
edit1.Text:
label1.Caption:=intTostr(Status);
label2.Caption:=Name;
FreeLibrary(DLLHandle);
end
else
MessageDlg('Error: could not find PSRemoteLib.dll', mtError, [mbOk], 0);
StrDispose(Name1);
end;
What I do wrong ???? In the sample .exe that comes with dll and runs in cmd mode this works fine !!!! Program takes picture and report filename ????
I have a sample source code and looks like this
// take a single shot and report the filename/status
char filename[256];
int status = ReleaseShutter(60, filename, sizeof(filename));
switch(status)
{
case 0: // success
if (filename && strlen(filename))
{
cout << "Success, image saved as: " << filename << endl;
}
else
{
cout << "Success, image saved on CF card?" << endl;
}
break;
case 1:
cerr << "PSRemote is not running" << endl;
break;
case 2:
cerr << "Camera is not connected" << endl;
break;
case 3:
cerr << "Camera is busy" << endl;
break;
case 4:
cerr << "Timeout waiting for image to be saved" << endl;
break;
default:
cerr << "ERROR: unexpected return status: " << status << endl;
}
}
return nRetCode;
}
PLEASE HELP !!!