Mi devo interfacciare ad una DLL per comandare un lettore di codici a barre.
La documentazione delle API è in C.

La funzione per leggere il codice a barre in C è dichiarata nel seguente modo :
codice:
HCEXPORTC HCStatus HCAPI BC_GetBarcode  	(  	HCHandle   	 readerHandle,
		HCHandle  	barcodeHandle,
		WCHAR *  	barcode,
		DWORD *  	sizeWChar	 
	)
QUESTO è l'esempio originale

codice:
returnStatus = BC_GetBarcode(readerHandle, HC_HANDLE_CURRENTITEM, NULL, &barcodeSize);
            // Allocate the barcode buffer
        barcode = new WCHAR[barcodeSize];
            // Get the barcode data 
        returnStatus = BC_GetBarcode(readerHandle, HC_HANDLE_CURRENTITEM, barcode, &barcodeSize);
            // Do something with the barcode data
Il primo parametro è rappresenta l'handle del lettore, il secondo mi dice quale codice leggere.
Nel terzo parametro io dovrei trovare il codice letto, l'ultimo parametro è la lunghezza del codice.

Io ho tradotto nella seguente maniera : "

codice:
BC_GetBarcode : Function (BarcodeReader : Pointer; BarcordeHandle : Longint; var Barcode : pWideString; var Size : Longint):LongInt; StdCall;
"


var
  PW : pWideString;
  WS : WideString;

  .
  .
  .
              // prima lettura x avere la lunghezza avvalorata 
              Stato := BC_GetBarcode(fBarcodeReader,HC_HANDLE_CURRENTITEM,PW,bCodeSize);

              //seconda lettura x leggere il barcode
              Stato := BC_GetBarcode(fBarcodeReader,HC_HANDLE_CURRENTITEM,PW,bCodeSize);
              WS := ^PW;


  .
  .
  .
La funzione va a buon fine, però quando provo ad utilizzare il valore di Barcode(WS) mi da sempre una serie di caratteri "strani".

Come va tradotta correttamente questa dichiarazione? oppure il problema è nella lettura del valore ?

Attendo fiducioso, Grazie 1000

Nicola