Hello. I have DLL written on Pascal and "headers" for use it (types and functions signatures definitions). How I can port "headers" to D?

Calling convention is `stdcall` (`extern (Windows)` for D), arguments of some functions is structs of structs and etc with static array fields:

```Pascal
type
  TOneHarmonic = record
    Koef: Single;
    Angle: Single;
  end;

  THarmonicsArray = array[2..50] of TOneHarmonic;
  TInterharmonicsArray = array[1..49] of TOneHarmonic;

  TVoltageCurrentOneFaza = record
    KalibKoef: Single;
    IncludeMainFreq: Boolean;
    MainFreqVoltCur: TOneHarmonic;
    Harmonics: THarmonicsArray;
    Interharmonics: TInterharmonicsArray;
  end;

  TVoltageCurrent = record
    Enable: Boolean;
    NominalID: Byte;
    Faza_A: TVoltageCurrentOneFaza;
    Faza_B: TVoltageCurrentOneFaza;
    Faza_C: TVoltageCurrentOneFaza;
  end;

  TSignal = record
    HasInterharmonics: Boolean;
    Voltage: TVoltageCurrent;
    Current: TVoltageCurrent;
    ...
  end;
  ...
```

in other file

```Pascal
function CheckSignalData(SignalData: PUserSignalData): Word;
  stdcall; external SIGNALK2MDLL;
```
PUserSignalData is pointer to TUserSignalData, first field of TUserSignalData is Signal, other fields is pointers to other types

If I understand correctly
1. `Single` is `float` in D, `Byte` is `byte`, `Boolean` is `bool`, `Word` is `ushort`
2. `array[A..B] of TFoo` is `TFoo[B-A+1]` (static array)

Can I rewrite records to structs like this?

```d
alias Word = short;
alias Single = float;
alias Byte = byte;
alias Boolean = bool;

struct OneHarmonic
{
    Single coef;
    Single angle;
}

alias HarmonicArray = OneHarmonic[49];

// TVoltageCurrentOneFaza
struct PhaseInfo
{
    // Must I align fields and/or structs?
    Single calibCoef;
    Boolean includeMainFreq;
    OneHarmonic mainFreqVoltCur;
HarmonicArray harmonics; // Can I replace Pascal static arrays with D static arrays?
    HarmonicArray interharmonics;
}

// TVoltageCurrent
struct ChannelInfo
{
    Boolean enable;
    Byte nominalID;
    PhaseInfo[3] phase; // Can I replace 3 fields to static array?
}

struct Signal
{
    Boolean hasInterharmonics;
    ChannelInfo voltage;
    ChannelInfo current; // #1
    ...
}
```

In this case I have error about current values (#1) and I think I badly rewrite Pascal records to D structs (ChannelInfo, PhaseInfo, OneHarmonic) and lose alignments and/or something else.

PS original pascal naming is very bad, I know

Reply via email to