![]() |
Delphi-Version: 10.2 Tokyo
c++ header konvertieren extern const struct
Hallo,
ich versuche mich gerade daran, die OPC-Library open62541 in Delphi einzubinden. In den Sourcen ist so was ähnliches definiert
Code:
also anscheinend wird eine Struktur deklariert und davon dann eine konstante Instanz erstellt.
typedef struct {
int a; int b; } Clientconfiguration; const Clientconfiguration DefaultConfiguration = { 55,56 }; Im Header, den ich dann konvertieren und importieren will:
Code:
Wie ist so was zu importieren (im realen Leben ist die Clientconfiguration natürlich um einiges komplizierter, enthält weitere structs, Funktionszeiger etc.
extern const __declspec(dllimport) Clientconfiguration DefaultConfiguration;
|
AW: c++ header konvertieren extern const struct
Dann eben nicht.
|
AW: c++ header konvertieren extern const struct
Ich denke eher, dass es darum geht, wie man das Symbol dann in einer Dll exportieren kann. Hier sind ja "normal" nur Funktionen vorgesehen.
|
AW: c++ header konvertieren extern const struct
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:
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.
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 }; |
AW: c++ header konvertieren extern const struct
Zitat:
Delphi-Quellcode:
type
Clientconfiguration = record a, b: Integer; end; const DefaultConfiguration: Clientconfiguration = (a: 55; b:56); |
AW: c++ header konvertieren extern const struct
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?
|
AW: c++ header konvertieren extern const struct
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'); |
AW: c++ header konvertieren extern const struct
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:
:-D
[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 |
AW: c++ header konvertieren extern const struct
Zitat:
|
AW: c++ header konvertieren extern const struct
Na ja wir Badener müssen ja zusammenhalten..... ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz