私は関数を呼び出していますが、得られるのは 0 だけです。これは何年も使用されているサードパーティのソフトウェアなので、正しいことはわかっています。C++ ヘッダー ファイルは次のとおりです。
#ifdef __cplusplus
extern "C" {
#endif
int __stdcall initialise();
int __stdcall closedown();
int __stdcall WGS84ToLocal(double * lat, double * longt, int d);
int __stdcall LocalToWGS84(double * lat, double * longt, int d);
int __stdcall OSGB36ToOSGBGrid(double lat, double longt, double * east, double * north);
int __stdcall OSGBGridToOSGB36(double east, double north, double * lat, double * longt);
ここに私のコードがあります
class Program
{
public static double lon = 50.82011492;
public static double lat = 0.117981131;
public static double north = 50.82011492;
public static double east = 0.117981131;
public static Int32 OGB_M = 150;
public static int iErr = 0;
[DllImport("TTDatum3.Dll", EntryPoint = "WGS84ToLocal", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern Int32 WGS84ToLocal([In, Out]ref double lat, [In, Out] ref double lon, Int32 datum);
[DllImport("TTDatum3.Dll", EntryPoint="LocalToWGS84", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern Int32 LocalToWGS84([In,Out]ref double lat,[In,Out] ref double lon, Int32 datum);
[DllImport("TTDatum3.Dll", EntryPoint = "OSGB36ToOSGBGrid", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern Int32 OSGB36ToOSGBGrid( double lat, double lon, [In,Out] ref double east, [In,Out] ref double north);
[DllImport("TTDatum3.Dll", EntryPoint = "OSGBGridToOSGB36", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern Int32 OSGBGridToOSGB36(double east, double north, [In,Out] ref double lat,[In,Out] ref double lon);
public static void Main(string[] args)
{
iErr = OSGBGridToOSGB36(east, north, ref lon, ref lat);
Console.WriteLine(iErr);
iErr = LocalToWGS84(ref lon, ref lat, OGB_M);
Console.WriteLine(iErr);
}