Einzelnen Beitrag anzeigen

Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: DLL Programmierung - Wie übergebe ich am sinnvollsten meine Daten?

  Alt 5. Okt 2016, 13:33
Um auf Deine DLL Frage zurückzukommen:

In eine DLL Schnitstelle gehören nur einfache Typen,
also z.B

Integer,
Word,
Double,
Single,
PWideChar,
PAnsiChar etc..

Auf keinen Fall normale Strings.

Records auch nur aus diesen Typen

Das hat den Vorteil das man Compilerunabhängig ist.

Wir benutzen das heftig in mixed Projekten (Delphi, VCC, und sogar noch Fortran)

Für Records (Structs) gilt dasselbe

also
z.B Delphi :

Delphi-Quellcode:
const
 cwmaxnamesize = 30;
type
 tApi_Materialrec = packed record
    Name: array [0 .. cwmaxnamesize - 1] of Ansichar;
    Group: array [0 .. cwmaxnamesize - 1] of Ansichar;
    MatCode: array [0 .. cwmaxnamesize - 1] of Ansichar;
    Mate1, mate2, mate3, matg1, matg2, matgew: single; // Materialgewicht

    Mattyp: integer;
    list_matbez,
    mat_photoflag,
    mat_photo1,
    mat_photo2: integer;
  end;
//C++

Code:
// Ausrichtung an Byte-Grenzen wegen Delphi
#pragma pack(push,1)

struct CHA_API_API Api_mat
{
  char     name[30], Group[30], MatCode[30];
  float    mate1,mate2,mate3, matg1,matg2,matgew;
  int      mattyp;
  int      list_matbez;
  int      photoflag, Photo1, Photo2;
};
Wenn Wir Interfaces benutzen gilt dasselbe.

einziger Unterschied ist das wir in Interface auch schon mal WideString benutzen,
da dort das Speichermanagement von Windows grift.

Funktionen geben niemals Records zurück sondern sind bei uns immer aufgebaut nach dem Schema:


function getMatDataforId(aid : Integer; var matrec : tApi_Materialrec) : Bool; Das funktioniert bei uns soweit problemlos.
Fritz Westermann
  Mit Zitat antworten Zitat