<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:"MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-NZ link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>My hat is off. Quite a lot of effort to help a fellow DUGer to that extent. It’s a nice community.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> delphi-bounces@listserver.123.net.nz [mailto:delphi-bounces@listserver.123.net.nz] <b>On Behalf Of </b>Jolyon Smith<br><b>Sent:</b> Thursday, 28 May 2015 7:05 p.m.<br><b>To:</b> NZ Borland Developers Group - Delphi List<br><b>Subject:</b> Re: [DUG] Delphi Digest, Vol 139, Issue 15<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>Based on this your declaration of the API function appears to be incorrect:<br><br><span style='font-size:9.5pt'>Documentation:<br><br></span><span style='font-size:9.5pt;font-family:"Courier New"'>int API_PCDRead(HANDLE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;commHandle,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DeviceAddress,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned char: &nbsp;mode,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned&nbsp;char: &nbsp;blk_add,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned char: &nbsp;num_blk,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned char: *snr,</span><o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned char: *buffer);<br></span><br>Your declaration:<br><br><span style='font-size:9.5pt;font-family:"Courier New"'>function&nbsp;API_PCDRead(comHandle: Thandle;</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DeviceAddress: integer;&nbsp;</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mode: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte;</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add_blk,num_blk:integer;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;snr,buffer:pchar): integer;</span><o:p></o:p></p></div></div></div></div></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Arial","sans-serif"'>Your <b>add_blk</b> and <b>num_blk</b> parameters are declared of type <i>Integer</i> (4 bytes) when the function is expecting parameters of type <i>unsigned char</i> (1 byte).&nbsp; This explains your access violation (the result of the way that memory used for passing parameters is handled when using 'C' calling conventions, if the caller of a function, and the function itself, do not agree on the exact sizes of the parameters being passed).</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Arial","sans-serif"'>Change your function declaration to:</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><div><p class=MsoNormal><b><span style='font-size:9.5pt;font-family:"Courier New"'>function&nbsp;API_PCDRead(comHandle: &nbsp; &nbsp; &nbsp; THandle;</span></b><o:p></o:p></p></div><div><p class=MsoNormal><b><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DeviceAddress: &nbsp; integer;&nbsp;</span></b><o:p></o:p></p></div><div><p class=MsoNormal><b><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mode: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte;</span></b><o:p></o:p></p></div><div><p class=MsoNormal><b><span style='font-size:9.5pt;font-family:"Courier New"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add_blk,num_blk: byte;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;snr,buffer: &nbsp; &nbsp; &nbsp;pchar): integer;</span></b><o:p></o:p></p></div></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt;font-family:"Arial","sans-serif"'>I would also double check the type declaration for the <b>Handle</b> parameter, just to be certain that the &quot;HANDLE&quot; type expected by the API function does in fact correspond to what appears to be the Windows API specific <b>THandle</b> type that you have declared it as.</span><span style='font-size:9.5pt'><br><br>This will almost certainly solve your access violation.&nbsp; Based on the documentation it appears that the way that you are handling the result following the call is correct (though I haven't examined it exhaustively).&nbsp; You will do yourself an enormous favour by simplifying and tidying this up as well as the initialization part.<br><br>Apart from anything else, it will greatly help someone maintaining the code in the future if the variables used in the calling code correspond to the parameters documented for the API. &nbsp;e.g. if you are passing a buffer in a parameter called &quot;<b>snr</b>&quot; then name your variable &quot;<b>snr</b>&quot;, or <b>snrParam</b>, and only access it that way.&nbsp; Don't use a variable and a pointer that happens to point to that variable (via a side-effect!) or if you absolutely must then at least ensure that the names involved make this usage clear, e.g. <b>snr</b> and <b>ptrsnr</b>.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:9.5pt'><br>Finally, the documentation also says that upon calling the function, the <b>snr</b> buffer is expected to hold an <i>8 byte</i> key value which you are only initialising with 7 bytes (6 x $FF and a $00) so I would double check that this initialization of the <b>snr</b> buffer in your code is correct.<br><br><br>Hope this helps.</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On 28 May 2015 at 18:27, Marshland Engineering &lt;<a href="mailto:marshland@marshland.co.nz" target="_blank">marshland@marshland.co.nz</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>This is running with a USB cable and Windows XP. It installs as a HID device.<br><br>4.2&nbsp; &nbsp; Mifare Appilication Commands<br><br>4.2.1 int<br>API_PCDRead(HANDLEcommHandle,int:DeviceAddress,unsignedchar:mode,unsigned<br>char:blk_add,unsigned char:num_blk,unsigned char:*snr, unsigned char:*buffer);<br><br>Description:<br>read the appointed length date at the appointed station<br>Input Parameter Description<br><br>commHandle&nbsp; &nbsp; &nbsp; the serial port handle<br>DeviceAddress&nbsp; &nbsp;equipment address<br>mode&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; read mode<br>&nbsp; &nbsp; &nbsp; &nbsp; ( Request Idle + Key A&nbsp; &nbsp; mode=00 ,&nbsp; Request Idle + Key B&nbsp; &nbsp; &nbsp;mode= 02,<br>&nbsp; &nbsp; &nbsp; &nbsp; Request All&nbsp; + Key A&nbsp; &nbsp; mode=01 ,&nbsp; Request All&nbsp; + Key B&nbsp; &nbsp; &nbsp;mode=03<br>&nbsp; &nbsp; &nbsp; &nbsp; the up number is hex<span style='font-family:"MS Gothic"'>)</span><br>blk_add read block address<br>num_blk read block amount<br>*snr&nbsp; &nbsp; a finger, transfer eight byte secret key<br>*buffer wait receive the variable of output finger<br><br>Output Parameter<br>If Command success<br>&nbsp; &nbsp; &nbsp; &nbsp; *snr&nbsp; &nbsp; 4 byte card number<br>&nbsp; &nbsp; &nbsp; &nbsp; *buffer the read date (the fact number is num_blk*16)<br>If Command Failure<br>&nbsp; &nbsp; &nbsp; &nbsp; buffer[0]&nbsp; &nbsp; &nbsp; &nbsp;System Error/Status Codes(You can consult the 2.2)<br><br>Return value:<br>&nbsp; &nbsp; &nbsp; &nbsp; 0x00&nbsp; &nbsp; Command OK. ( success)<br>&nbsp; &nbsp; &nbsp; &nbsp; 0x01&nbsp; &nbsp; Command FAILURE<br><br><br>The full manual is here<br><a href="http://www.marshland.co.nz/ftp/Misc/DLL.doc" target="_blank">http://www.marshland.co.nz/ftp/Misc/DLL.doc</a><br>Thanks Wallace.<br><br>_______________________________________________<br>NZ Borland Developers Group - Delphi mailing list<br>Post: <a href="mailto:delphi@listserver.123.net.nz">delphi@listserver.123.net.nz</a><br>Admin: <a href="http://delphi.org.nz/mailman/listinfo/delphi" target="_blank">http://delphi.org.nz/mailman/listinfo/delphi</a><br>Unsubscribe: send an email to <a href="mailto:delphi-request@listserver.123.net.nz">delphi-request@listserver.123.net.nz</a> with Subject: unsubscribe<o:p></o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></body></html>