PDA

View Full Version : [VB6] Problema dll C


Gotar
20-10-2004, 14:34
Ciao, ho un problema in vb6 (sp6) con l'utilizzo di una funzione di una dll C.

indicazione guida dll:

int SPPSRVReadScadenza(int iNumeroScadenza,double *dImporto,LPSTR szData,LPSTR szTipo)


Mia versione in vb
...
...
Public Declare Function SPPSRVReadScadenza Lib "SPPSERV.DLL" (ByVal iNumeroScadenza As Integer, ByRef dImporto As Double, ByVal szData As String, ByVal szTipo As String) As Integer
....
....
Dim dImporto As Double
Dim szData As String * 9
Dim szTipo As String * 2
.....
.....
ns = SPPSRVCalcolaScadenze( ..... )
For j = 1 To ns
szData = String$(9, vbNullChar)
szTipo = String$(2, vbNullChar)
h = SPPSRVReadScadenza(j, dImporto, szData, szTipo) <--- ERRORE di Windows: AppName: vb6.exe AppVer: 6.0.97.82 ModName: sppserv.dll ModVer: 0.0.0.0 Offset: 000481df
....
....
Next


STESSA COSA FATTA IN DELPHI (FUNZIONANTE)
...
function SPPSRVReadScadenza(iNumeroScadenza: integer; var dImporto: double; szData,szTipo: LPSTR): integer; stdcall; external 'sppserv.dll';
...
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, k: integer;
importo: double;
data, tipo: LPSTR;
begin
...
i := SPPSRVCalcolaScadenze('3', FALSE, 9000, '20040101', '20040101', '', '', '', '');
for j := 1 to i do
begin
data := StrAlloc(9); <--- se ometto queste righe da errore
tipo := StrAlloc(2); <--- di access violation (delphi non inchioda l'ambiente)
k := SPPSRVReadScadenza(j, importo, data, tipo); <---- FUNZIONA
ShowMessage(Format('%s %s',[data, tipo]));
end;
....
end;
end.

In base a questo ho fatto moltissime prove guardando molti esempi su internet. :muro:
Il mio dubbio è che vb non allochi le stringhe terminate dal NULL (stringhe standard C) come ha richiesto delphi.
Qcuno ha qche idea o suggerimento???
Aiutooooo!!!
Grazie a tutti.