AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi c++ header konvertieren extern const struct

c++ header konvertieren extern const struct

Ein Thema von Rainer Wolff · begonnen am 8. Okt 2018 · letzter Beitrag vom 27. Sep 2020
Antwort Antwort
Seite 1 von 2  1 2   
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

c++ header konvertieren extern const struct

  Alt 8. Okt 2018, 23:32
Delphi-Version: 10.2 Tokyo
Hallo,

ich versuche mich gerade daran, die OPC-Library open62541 in Delphi einzubinden.

In den Sourcen ist so was ähnliches definiert

Code:
typedef struct {
   int a;
   int b;
} Clientconfiguration;

const Clientconfiguration DefaultConfiguration = { 55,56 };
also anscheinend wird eine Struktur deklariert und davon dann eine konstante Instanz erstellt.

Im Header, den ich dann konvertieren und importieren will:
Code:
extern const __declspec(dllimport) Clientconfiguration DefaultConfiguration;
Wie ist so was zu importieren (im realen Leben ist die Clientconfiguration natürlich um einiges komplizierter, enthält weitere structs, Funktionszeiger etc.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 17:51
Dann eben nicht.

Geändert von samso ( 9. Okt 2018 um 18:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 17:54
Ich denke eher, dass es darum geht, wie man das Symbol dann in einer Dll exportieren kann. Hier sind ja "normal" nur Funktionen vorgesehen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 18:46
ja, Zacherl hat recht:

Die gesamte Konstantenstruktur ist extern in der DLL festgelegt, sie enthält nicht nur einfache Datentypen, sondern auch Funktionszeiger, die wiederum auf Funktionen innerhalb der DLL verweisen

Code:
const UA_ClientConfig UA_ClientConfig_default = {
    5000, /* .timeout, 5 seconds */
    10 * 60 * 1000, /* .secureChannelLifeTime, 10 minutes */
    UA_Log_Stdout, /* .logger */
    { /* .localConnectionConfig */
        0, /* .protocolVersion */
        65535, /* .sendBufferSize, 64k per chunk */
        65535, /* .recvBufferSize, 64k per chunk */
        0, /* .maxMessageSize, 0 -> unlimited */
        0 /* .maxChunkCount, 0 -> unlimited */
    },
    UA_ClientConnectionTCP, /* .connectionFunc (for sync connection) */
    UA_ClientConnectionTCP_init, /* .initConnectionFunc (for async client) */
    UA_ClientConnectionTCP_poll_callback, /* .pollConnectionFunc (for async connection) */
    0,   /* .customDataTypesSize */
    NULL, /* .customDataTypes */

    NULL, /* .stateCallback */
    0,   /* .connectivityCheckInterval */

    NULL, /* .inactivityCallback */
    NULL, /* .clientContext */

#ifdef UA_ENABLE_SUBSCRIPTIONS
    10, /* .outStandingPublishRequests */
    NULL /* .subscriptionInactivityCallback */
#endif
};
Ich habe auch schon versucht, die Struktur auf der Delphiseite zu füllen und die Funktionszeiger mit leeren Dummyfunktionen versorgt, aber da haut es mir halt nur eine Speicherverletzung um die Ohren.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:14
Code:
typedef struct {
   int a;
   int b;
} Clientconfiguration;

const Clientconfiguration DefaultConfiguration = { 55,56 };
Falls gefragt war wie man das nach Delphi bringt, ich würde es so machen:
Delphi-Quellcode:
type
  Clientconfiguration = record
   a, b: Integer;
  end;
const
 DefaultConfiguration: Clientconfiguration = (a: 55; b:56);
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#6

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:18
Du willst also die Library die normalerweise in einen C-Projekt eingebunden wird, statt dessen als DLL erstellen und diese DLL soll dann in ein Delphi-Projekt eingebunden werden, verstehhe ich das so richtig?
  Mit Zitat antworten Zitat
Fritzew

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

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:25
Ich habe so etwas ähnliches,
allerdings ist das Struct dort nicht als const sondern als var deklariert.
Aber vielleicht hilft es Dir weiter.
Du musst es zur Laufzeit zuweisen. Delphi kann keine Variablen direkt importieren

Bei mir sieht das so aus:

Delphi-Quellcode:
type
  pc_graphmode = ^tc_graphmode;
  tc_graphmode = packed record
    open_gl, ogl_mode, ogl_turbo, ogl_newdlist, ogl_des_mode,
      ogl_bg_axo, ogl_bg_persp, ogl_stencil, ogl_light_ambient,
      ogl_light_diffuse: integer;
  end;

var c_graphmode : pc_graphmode = nil;

// So wird es importiert du musst die Dll mit LoadLibrary etc laden dann:
c_graphmode := GetProcaddress(dll, 'graphmode');
Fritz Westermann
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:49
Jetzt habe ich schon zweimal versucht, eine Antwort zu posten, und jedesmal hiess es: Jemand anderes hat inzwischen das Thema aktualisiert.
Ihr seid wirklich fix, grosses Lob.

Und vielen Dank, Fritzew, das war ein Treffer
Code:
[2018-10-09 19:41:14.307 (UTC+0200)] info/network      TCP network layer listening on opc.tcp://host:4840/
[2018-10-09 19:41:29.265 (UTC+0200)] info/network      Connection 496 | New connection over TCP from ::1
[2018-10-09 19:41:29.269 (UTC+0200)] info/channel      Creating a new SecureChannel
[2018-10-09 19:41:29.269 (UTC+0200)] warn/securitypolicy       No PKI plugin set. Accepting all certificates
[2018-10-09 19:41:29.270 (UTC+0200)] info/channel      Connection 496 | SecureChannel 1 | Opened SecureChannel
[2018-10-09 19:41:29.272 (UTC+0200)] info/session      Connection 496 | SecureChannel 1 | Session ns=1;g=ec600624-ead3-8b0c-2a42-f46f9dd9cdcc | 
ActivateSession: Session activated
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#9

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:51
Hallo,

ich versuche mich gerade daran, die OPC-Library open62541 in Delphi einzubinden.
Ich hätte auch Interesse an einer Umsetzung nach Delphi. Würdest du hier wieder informieren, wenn du weiter bist?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Fritzew

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

AW: c++ header konvertieren extern const struct

  Alt 9. Okt 2018, 19:56
Na ja wir Badener müssen ja zusammenhalten.....
Fritz Westermann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz