Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2018, 19:20   #1
sunrule
Новичок
Джуниор
 
Регистрация: 03.07.2018
Сообщений: 1
По умолчанию Соответствии типов аргументов Borland c++ 5.5 и Delphi 6 при вызове функции из внешней Dll

Доброе время суток, уважаемые!
Есть код на C++ необходимо переписать на Delphi 6, никак не доходит правильное соответствие типов аргументов в C++ и Delphi.
Код C++
Код:
#define TRIANGL_DLL_API __declspec(dllimport)
struct TPoint2
{
        double Longt;
        double Latit;
        bool Reject;
};
struct TMapPoint
{
double XPos; // [-180 : 180]
double YPos;
};
extern "C"
{
  // Параметры
  // paInputPoint      - входной/выходной - массив. В поле Reject структуры TPoint2 возвращается признак выбраковки
  // PointLen          - входной - длина массива
  // pCenterMass          - выходной - расчитанная точка
  // MakeRejection        - входной - делать выбраковку (TRUE - делать)
  // DitanceForReject_km  - входной - выбраковка по дистанции. 
  // Consistency - выходной параметр - признак подозрительности
  // MaxPerimeter_km - входной - периметр фигуры.
  TRIANGL_DLL_API BOOL __cdecl Triangl(TPoint2 *paInputPoint, long PointLen, TMapPoint *pCenterMass,BOOL MakeRejection, BOOL &Consistency,char *Additional);
Скипнуто
Код:
    Result = mpTrianglFunc(paInputPoint,PointLen,pCenterMass,MakeRejection,Consistency,Perimeter);
смущает как описать и передать TPoint2 *paInputPoint, TMapPoint *pCenterMass и BOOL &Consistency
Код Delphi
Код:
type TPoint2 = record
        Longt: Double;
        Latit: Double;
        Reject: Boolean;
end;
type TMapPoint = record
XPos: Double;
YPos: Double;
end;
type
    TInputPoint = array [0..360] of TPoint2;
    PTPoint2 = ^TPoint2;
    PTMapPoint = ^TMapPoint;
TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
function mpTrianglFunc(var paInputPoint: PTPoint2;PointLen: Longint;var pCenterMass: PTMapPoint;MakeRejection: Boolean;out Pcons: PBoolean;MaxPerimeter_km: PAnsiChar): boolean; cdecl; external 'triangl.dll' name 'Triangl';
var Result2: Boolean;
    maPointsToTriangle: array [0..360] of TPoint2;
    paInputPoint: PTPoint2;
    PointLen: Integer;
    CenterMassBrg: TMapPoint;
    pCenterMassBrg: PTMapPoint;
    MakeRejection: Boolean;
    Consistency: Boolean;
    PCons: PBoolean;
    MaxPerimeter_km: Double;
    DistanceForReject_km: Double;
    DistanceToCenterMass_km: Double;
    MyPerimeter: PChar;
    begin
    MakeRejection:=True;
    MaxPerimeter_km:=1000;
    DistanceForReject_km:=1000.;
    GetMem(MyPerimeter, 128);
    DecimalSeparator := '.';
    SysUtils.StrPCopy(MyPerimeter,Format('<PERIMETER>%7.6f</PERIMETER>', [MaxPerimeter_km]));
          PointLen:=2;
          maPointsToTriangle[0].Longt         := 1.4;
          maPointsToTriangle[0].Latit         := 50.3;
          maPointsToTriangle[0].Reject         := False;
          maPointsToTriangle[1].Longt         := 11.2;
          maPointsToTriangle[1].Latit         := 25.1;
          maPointsToTriangle[1].Reject         := False;
          paInputPoint:=@maPointsToTriangle;
          CenterMassBrg.YPos:=-1;
          CenterMassBrg.XPos:=-1;
          pCenterMassBrg:=@CenterMassBrg;
          Consistency:=False;
          PCons:=@Consistency;
 Result2:=mpTrianglFunc(paInputPoint,PointLen,pCenterMassBrg,MakeRejection,PCons,MyPerimeter);
В Watch List вижу:
paInputPoint= адрес
paInputPoint^= значение первого элемента массива

здесь вроде всё хорошо

CenterMassBrg= значения структуры (-1,-1)
pCenterMassBrg=nil
pCenterMassBrg^=inaccesible value
Consistency=False
PCons=nil
PCons^=inaccesible value

А здесь - не хорошо. Почему значения не присваиваются? ЧЯДНТ?
sunrule вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
слишком много аргументов в вызове функции или как создать много файлов на рабочем столе ON Mikhail Общие вопросы C/C++ 1 07.03.2018 21:02
Ошибка при вызове функции Vilkas Помощь студентам 2 19.12.2014 06:18
Запуск внешней программы и несколько аргументов garengobit Помощь студентам 4 03.06.2012 16:31
Error 424 - Object required, при вызове процедуры из DLL penb Microsoft Office Excel 4 21.03.2012 21:18
потеря параметров при вызове формы из dll... Roof Общие вопросы Delphi 4 22.08.2008 22:08