Re: [DUG] Problem using a dll.

2004-04-04 Thread Corey Murtagh
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.

2004-04-04 Thread David O'Brien
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.

2004-04-04 Thread Phil Middlemiss
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.

2004-04-04 Thread David O'Brien
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.

2004-04-04 Thread Paul Mckenzie
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