Re: [DUG] Problem using a dll.
David O'Brien wrote: Haven't done much of this before. I am trying to use a dll with a function definition of: Long _stdcall TransGeogPt(LPSTR psGridFile, long lDirection, double dLatitude, double dLongitude, double* pdLatNew, double* pdLongNew, double* pdLatAcc, double* pdLongAcc) I have translated this as: function(psGridFile: PChar; lDirection: Integer; dLatitude, dLongitude: Double; pdLatNew, pdLongNew, pdLatAcc, pdLongAcc: PDouble): Integer; However trying to use this function I get: Access violation at address 77C43B4C in module 'MSVCRT.DLL'. Read of address '. Any ideas? Have I translated wrong? The interface translation looks right, so long as a Double is an 8-byte floating point. Are you sure you're supplying all the right values for the pointers you're sending in to that? Allocating the buffers and so on? -- Corey Murtagh The Electric Monk Quidquid latine dictum sit, altum viditur! ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi
RE: [DUG] Problem using a dll.
Yes, I am now thanks, I just tried Getmem for the Pdouble parameters, and it works now. Still having some problems with the LPSTR psGridFile parameter, this may not be being passed correctly as the function fails with an error relating to the psGridFile not being right. Ta, Dave. -Original Message- From: Corey Murtagh [mailto:[EMAIL PROTECTED] Sent: Monday, 5 April 2004 9:17 a.m. To: NZ Borland Developers Group - Delphi List Subject: Re: [DUG] Problem using a dll. David O'Brien wrote: Haven't done much of this before. I am trying to use a dll with a function definition of: Long _stdcall TransGeogPt(LPSTR psGridFile, long lDirection, double dLatitude, double dLongitude, double* pdLatNew, double* pdLongNew, double* pdLatAcc, double* pdLongAcc) I have translated this as: function(psGridFile: PChar; lDirection: Integer; dLatitude, dLongitude: Double; pdLatNew, pdLongNew, pdLatAcc, pdLongAcc: PDouble): Integer; However trying to use this function I get: Access violation at address 77C43B4C in module 'MSVCRT.DLL'. Read of address '. Any ideas? Have I translated wrong? The interface translation looks right, so long as a Double is an 8-byte floating point. Are you sure you're supplying all the right values for the pointers you're sending in to that? Allocating the buffers and so on? -- Corey Murtagh The Electric Monk Quidquid latine dictum sit, altum viditur! ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi
Re: [DUG] Problem using a dll.
The pdLatNew etc can simply be desribed as Doubles but with the var qualifier - although I don't think that necessarily is the issue. I suspect the problem lies in how you are preparing the various variables and values when you call the routine. Can you provide some code that shows how you are calling it? Phil. - Original Message - From: David O'Brien [EMAIL PROTECTED] To: NZ Borland Developers Group - Delphi List [EMAIL PROTECTED] Sent: Monday, April 05, 2004 8:41 AM Subject: [DUG] Problem using a dll. Haven't done much of this before. I am trying to use a dll with a function definition of: Long _stdcall TransGeogPt(LPSTR psGridFile, long lDirection, double dLatitude, double dLongitude, double* pdLatNew, double* pdLongNew, double* pdLatAcc, double* pdLongAcc) I have translated this as: function(psGridFile: PChar; lDirection: Integer; dLatitude, dLongitude: Double; pdLatNew, pdLongNew, pdLatAcc, pdLongAcc: PDouble): Integer; However trying to use this function I get: Access violation at address 77C43B4C in module 'MSVCRT.DLL'. Read of address '. Any ideas? Have I translated wrong? Cheers, Dave. ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi
RE: [DUG] Problem using a dll.
Most problems are solved now, just an issue with the filename. Procedure Convert(Dir: Integer; Lat, Long: Double) ; var NewLat, NewLong, LatAcc, LongAcc: PDouble ; Err: Integer ; Filename: LPSTR ; begin GetMem(NewLat, SizeOf(Double)) ; GetMem(NewLong, SizeOf(Double)) ; GetMem(LatAcc, SizeOf(Double)) ; GetMem(LongAcc, SizeOf(Double)) ; Filename := 'c:\grid\nzgd2kgrid0005.gsb' ; Err := TransGeogPt(Filename, Dir, Lat, Long, NewLat, NewLong, LatAcc, LongAcc) ; if Err 1 then ShowMessage('Error ('+InttoStr(Err)+')') ; ... This returns error 44 which is described as Invalid file extension on Grid Shift File (must be either .asc or .gsb). The same error is returned if the file is valid or not, so I assume the filename I am passing is not being sent properly. Dave. -Original Message- From: Phil Middlemiss [mailto:[EMAIL PROTECTED] Sent: Monday, 5 April 2004 9:32 a.m. To: NZ Borland Developers Group - Delphi List Subject: Re: [DUG] Problem using a dll. The pdLatNew etc can simply be desribed as Doubles but with the var qualifier - although I don't think that necessarily is the issue. I suspect the problem lies in how you are preparing the various variables and values when you call the routine. Can you provide some code that shows how you are calling it? Phil. - Original Message - From: David O'Brien [EMAIL PROTECTED] To: NZ Borland Developers Group - Delphi List [EMAIL PROTECTED] Sent: Monday, April 05, 2004 8:41 AM Subject: [DUG] Problem using a dll. Haven't done much of this before. I am trying to use a dll with a function definition of: Long _stdcall TransGeogPt(LPSTR psGridFile, long lDirection, double dLatitude, double dLongitude, double* pdLatNew, double* pdLongNew, double* pdLatAcc, double* pdLongAcc) I have translated this as: function(psGridFile: PChar; lDirection: Integer; dLatitude, dLongitude: Double; pdLatNew, pdLongNew, pdLatAcc, pdLongAcc: PDouble): Integer; However trying to use this function I get: Access violation at address 77C43B4C in module 'MSVCRT.DLL'. Read of address '. Any ideas? Have I translated wrong? Cheers, Dave. ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi
Re: [DUG] Problem using a dll.
Looks to me like you are not allocating memory for the filename - and then pass the pointer to the allocated memory... Regards Paul McKenzie Analyst Programmer SMSS Ltd. - Original Message - From: David O'Brien [EMAIL PROTECTED] To: NZ Borland Developers Group - Delphi List [EMAIL PROTECTED] Sent: Monday, April 05, 2004 9:47 AM Subject: RE: [DUG] Problem using a dll. Most problems are solved now, just an issue with the filename. Procedure Convert(Dir: Integer; Lat, Long: Double) ; var NewLat, NewLong, LatAcc, LongAcc: PDouble ; Err: Integer ; Filename: LPSTR ; begin GetMem(NewLat, SizeOf(Double)) ; GetMem(NewLong, SizeOf(Double)) ; GetMem(LatAcc, SizeOf(Double)) ; GetMem(LongAcc, SizeOf(Double)) ; Filename := 'c:\grid\nzgd2kgrid0005.gsb' ; Err := TransGeogPt(Filename, Dir, Lat, Long, NewLat, NewLong, LatAcc, LongAcc) ; if Err 1 then ShowMessage('Error ('+InttoStr(Err)+')') ; ... This returns error 44 which is described as Invalid file extension on Grid Shift File (must be either .asc or .gsb). The same error is returned if the file is valid or not, so I assume the filename I am passing is not being sent properly. Dave. -Original Message- From: Phil Middlemiss [mailto:[EMAIL PROTECTED] Sent: Monday, 5 April 2004 9:32 a.m. To: NZ Borland Developers Group - Delphi List Subject: Re: [DUG] Problem using a dll. The pdLatNew etc can simply be desribed as Doubles but with the var qualifier - although I don't think that necessarily is the issue. I suspect the problem lies in how you are preparing the various variables and values when you call the routine. Can you provide some code that shows how you are calling it? Phil. - Original Message - From: David O'Brien [EMAIL PROTECTED] To: NZ Borland Developers Group - Delphi List [EMAIL PROTECTED] Sent: Monday, April 05, 2004 8:41 AM Subject: [DUG] Problem using a dll. Haven't done much of this before. I am trying to use a dll with a function definition of: Long _stdcall TransGeogPt(LPSTR psGridFile, long lDirection, double dLatitude, double dLongitude, double* pdLatNew, double* pdLongNew, double* pdLatAcc, double* pdLongAcc) I have translated this as: function(psGridFile: PChar; lDirection: Integer; dLatitude, dLongitude: Double; pdLatNew, pdLongNew, pdLatAcc, pdLongAcc: PDouble): Integer; However trying to use this function I get: Access violation at address 77C43B4C in module 'MSVCRT.DLL'. Read of address '. Any ideas? Have I translated wrong? Cheers, Dave. ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi ___ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi