monitorwa
asked on
DLL call in Delphi
Hi all,
I am trying to write some functions for a dll which means I need to declare the function, and call the function - sorry im not very good at these!
I have an example piece of code which was written in C++ and this is how it calls the function
RDR_SendCommandGetData(rea der_handle , "select", "", buffer);
I have details on how what the functions requires here
RDR_SendCommandGetData // this is the function name
The RDR_SendCommandGetData function sends a command to a reader specified by its
handle and receives data.
Win char* RDR_SendCommandGetData(voi d* hReader, char* command, char* / this is some kind of declaration or description on the function
data, char* buffer);
Parameter Description // next are the defination of the variables required.
hReader: Handle of reader to send a command.
command: 0 terminated string with the command e,g one of the commands I know is "select"
data: ASCII 0 terminated string containing the data
BIN length of data (1 byte) + data // note when using the select command there is no data
buffer: A buffer of the return value.
ASCII protocol: The buffer size has the range of 514 bytes.
BIN protocol: The buffer size has the range of 256 bytes.
I am getting confused with the char variable types and think they need to be pointers or something like that, I have put my code below but please appreciate it is wrong as I have been trying allsorts
function declared
function RDR_SendCommandGetData(rea derhandle: integer;co mmand:poin ter;data:p ointer;car did:pointe r):integer ; stdcall; external 'Reader.dll' name 'RDR_SendCommandGetData'; // gets card ID
Im trying to call it as follows
readcard := RDR_SendCommandGetData(rea derhandle, @command,@buffer,@cardid);
I have set command,buffer, and cardid as string type variables.
I really appreciate any help as my normal programmer is on leave and Im trying to sort this on my own (fat chance without you guys!)
thanks
Dave
I am trying to write some functions for a dll which means I need to declare the function, and call the function - sorry im not very good at these!
I have an example piece of code which was written in C++ and this is how it calls the function
RDR_SendCommandGetData(rea
I have details on how what the functions requires here
RDR_SendCommandGetData // this is the function name
The RDR_SendCommandGetData function sends a command to a reader specified by its
handle and receives data.
Win char* RDR_SendCommandGetData(voi
data, char* buffer);
Parameter Description // next are the defination of the variables required.
hReader: Handle of reader to send a command.
command: 0 terminated string with the command e,g one of the commands I know is "select"
data: ASCII 0 terminated string containing the data
BIN length of data (1 byte) + data // note when using the select command there is no data
buffer: A buffer of the return value.
ASCII protocol: The buffer size has the range of 514 bytes.
BIN protocol: The buffer size has the range of 256 bytes.
I am getting confused with the char variable types and think they need to be pointers or something like that, I have put my code below but please appreciate it is wrong as I have been trying allsorts
function declared
function RDR_SendCommandGetData(rea
Im trying to call it as follows
readcard := RDR_SendCommandGetData(rea
I have set command,buffer, and cardid as string type variables.
I really appreciate any help as my normal programmer is on leave and Im trying to sort this on my own (fat chance without you guys!)
thanks
Dave
ASKER
Thanks ciuly - I dont suppose you could add how you call the function and declare the variables?
thanks
Dave
thanks
Dave
just like the parameters...
var
readcard:pchar;
readerhandle:pointer;
command, buffer, cardid:pchar;
begin
initialize readerhandle with some RDR_ call I suppose
command:='select';
buffer:='';// whatever
cardid:='';// whatever
readcard := RDR_SendCommandGetData(rea derhandle, command,buffer,cardid);
close readerhandle if needed with some other RDR_ call
end;
var
readcard:pchar;
readerhandle:pointer;
command, buffer, cardid:pchar;
begin
initialize readerhandle with some RDR_ call I suppose
command:='select';
buffer:='';// whatever
cardid:='';// whatever
readcard := RDR_SendCommandGetData(rea
close readerhandle if needed with some other RDR_ call
end;
ASKER
sorry for the slow response, I have been trying all sorts of things with no success. I have done exactly as you listed above and keep getting an access violation at address 000000
Any odeas?
thanks
Dave
Any odeas?
thanks
Dave
ASKER
ok I think it may be from the way I had opened the port and reader, the instructions process is as follows
RDR_OpenComm
RDR_DetectReader
RDR_OpenReader
RDR_SendCommand
RDR_GetData
RDR_CloseReader
RDR_CloseComm
and the C++ definition is as follows
void* RDR_OpenComm(char* device, char autodetect, struct
presetSettings* settings);
char* RDR_DetectReader(void* hComm, char* buffer);
void* RDR_OpenReader(void* hComm, unsigned char id, short
knownReader);
char* RDR_SendCommandGetData(voi d* hReader, char* command, char*
data, char* buffer);
My attempts that dont work are as follows - first the defination
function RDR_OpenComm(com_port:pcha r;autodete ct:char;se ttings:tdc b):pointer ; stdcall; external 'Reader.dll' name 'RDR_OpenComm'; // returns port handle
function RDR_DetectReader(porthandl e:pointer; detect_buf fer:pchar) :pchar; stdcall; external 'Reader.dll' name 'RDR_DetectReader'; // returns reader handle
and called as follows
com_port := 'com4';
porthandle := RDR_OpenComm(com_port,'1', structure) ;
RDR_DetectReader(porthandl e, detect_buffer);
vars are
structure: tdcb;
com_port : pchar;
readerhandle,porthandle, readeropen : pointer;
reply, command1,data,buffernew : string;
readcard :pchar;
command, buffer, cardid , detect_buffer , readerhand:pchar;
I have also attached the document that list all of these and more - Im really struggling here, it appears to get the com handle ok but cant get past the next stage
thanks
Dave
Reader-DLL-V3-3-0-User-Manual-03.zip
RDR_OpenComm
RDR_DetectReader
RDR_OpenReader
RDR_SendCommand
RDR_GetData
RDR_CloseReader
RDR_CloseComm
and the C++ definition is as follows
void* RDR_OpenComm(char* device, char autodetect, struct
presetSettings* settings);
char* RDR_DetectReader(void* hComm, char* buffer);
void* RDR_OpenReader(void* hComm, unsigned char id, short
knownReader);
char* RDR_SendCommandGetData(voi
data, char* buffer);
My attempts that dont work are as follows - first the defination
function RDR_OpenComm(com_port:pcha
function RDR_DetectReader(porthandl
and called as follows
com_port := 'com4';
porthandle := RDR_OpenComm(com_port,'1',
RDR_DetectReader(porthandl
vars are
structure: tdcb;
com_port : pchar;
readerhandle,porthandle, readeropen : pointer;
reply, command1,data,buffernew : string;
readcard :pchar;
command, buffer, cardid , detect_buffer , readerhand:pchar;
I have also attached the document that list all of these and more - Im really struggling here, it appears to get the com handle ok but cant get past the next stage
thanks
Dave
Reader-DLL-V3-3-0-User-Manual-03.zip
ASKER
I guess Ill just have to put this one down as to hard for everyone!
Thanks to Ciurly but his answers didnt actually work
Dave
Thanks to Ciurly but his answers didnt actually work
Dave
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi Ciuly,
I really appreciate your assistance so far and fully understand what you are saying - yea who gets spare time, certainly not me either! What I will do is award you the points as I am sure we would get there int he end but I dont need to waste your time anymore as my developer has come back from holidays and I think he has it all working now. I was really just trying to get a better understanding of these things but its not important enough for you to spend a lot of time trying to more or less teach me, so thanks again and maybe you will help with other questions I have
I really appreciate your assistance so far and fully understand what you are saying - yea who gets spare time, certainly not me either! What I will do is award you the points as I am sure we would get there int he end but I dont need to waste your time anymore as my developer has come back from holidays and I think he has it all working now. I was really just trying to get a better understanding of these things but its not important enough for you to spend a lot of time trying to more or less teach me, so thanks again and maybe you will help with other questions I have
translates to
function RDR_SendCommandGetData(hRe