Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typdeklarationen in C und Delphi (https://www.delphipraxis.net/131350-typdeklarationen-c-und-delphi.html)

messie 24. Mär 2009 12:58

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von Zoot
Zitat:

Zitat von messie
Was ist denn bitte
Zitat:

typedef unsigned __int64
für ein Typ in Delphi? Denn cardinal endet ja bei 32 bit.

Grüße, Messie

UInt64.

Wieso kennt mein Delphi das nicht? Wo ist denn der Typ deklariert?

Grüße, Messie

Zoot 24. Mär 2009 13:05

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von messie
Wieso kennt mein Delphi das nicht? Wo ist denn der Typ deklariert?

Ja, den gibts leider erst ab Delphi 7.
Deklariere dir doch irgendwas anderes mit 8 byte größe und konvertier es hinterher.

messie 24. Mär 2009 16:23

Re: Typdeklarationen in C und Delphi
 
Ich habe jetzt erstmal einen int64 genommen, vielleicht brauche ich den Wert garnicht.

Mit der dll kann ich jetzt sprechen. Nun muss ich die noch dazu bringen, das Richtige zu tun.

Aus
Code:
DAQmxReadAnalogF64(TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, float64 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved);
habe ich
Delphi-Quellcode:
function DAQmxReadAnalogF64(taskHandle: PTaskHandle;
                            numSampsPerChan: INT32;timeout: FLOAT64;fillMode: BOOL32;var readArray: array of double;arraySizeInSamps: UINT32;var sampsPerChanRead: INT32;var reserved: BOOL32): INT32 cdecl
gemacht. Beim Aufruf
Delphi-Quellcode:
DAQmxReadAnalogF64(TaskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,read,nil);
bekomme ich aber die Meldung "die Typen der tatsächlichen und formalen Parameter müssen übereinstimmen", da finde ich den Fehler nicht. Ich vermute mal, dass readArray[] und array of double nicht kompatibel sind weil c ja eigentlich keine offenen arrays kennt.
Wie gehe ich damit um?

Grüße, Messie

uligerhardt 24. Mär 2009 16:44

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von messie
Ich habe eine Headerdatei und eine c-lib, die per OLE auf die tatsächliche dll zugreift.

Schuss ins Blaue: Ich konnte nicht ganz rauslesen, welche Lib/DLL/... jetzt das OLE-Objekt ist, aber vielleicht kannst du ja direkt auf selbiges zugreifen, und etwaige Wrapper-Bibliotheken auslassen?

messie 24. Mär 2009 17:13

Re: Typdeklarationen in C und Delphi
 
Genau das versuche ich hier gerade, indem ich direkt auf die hinter den Wrapper liegende dll zugreife. Das funktioniert auch schon etwas, aber die Übersetzung der dll-Zugriffe klemmt etwas.

Grüße, Messie

uligerhardt 24. Mär 2009 19:47

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von messie
Genau das versuche ich hier gerade, indem ich direkt auf die hinter den Wrapper liegende dll zugreife.

Ach so. Dann nur weiter so. :mrgreen:

Uwe Raabe 24. Mär 2009 20:36

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von messie
Aus
Code:
DAQmxReadAnalogF64(TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, float64 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved);
habe ich
Delphi-Quellcode:
function DAQmxReadAnalogF64(taskHandle: PTaskHandle;
                            numSampsPerChan: INT32;timeout: FLOAT64;fillMode: BOOL32;var readArray: array of double;arraySizeInSamps: UINT32;var sampsPerChanRead: INT32;var reserved: BOOL32): INT32 cdecl
gemacht. Beim Aufruf
Delphi-Quellcode:
DAQmxReadAnalogF64(TaskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,read,nil);
bekomme ich aber die Meldung "die Typen der tatsächlichen und formalen Parameter müssen übereinstimmen", da finde ich den Fehler nicht. Ich vermute mal, dass readArray[] und array of double nicht kompatibel sind weil c ja eigentlich keine offenen arrays kennt.

Da hast du vollkommen Recht! Aber bei dem Float-Array kannst du mogeln (machen die C-Programmierer dauernd):
Delphi-Quellcode:
function DAQmxReadAnalogF64(taskHandle: PTaskHandle;
                            numSampsPerChan: INT32;
                            timeout: FLOAT64;
                            fillMode: BOOL32;
                            var readArray: FLOAT64;
                            arraySizeInSamps: UINT32;
                            var sampsPerChanRead: INT32;
                            reserved: Pointer): INT32 cdecl;
...
  DAQmxReadAnalogF64(TaskHandle, 1000, 10.0, DAQmx_Val_GroupByChannel, data[0], 1000, read, nil);
...

Apollonius 24. Mär 2009 21:25

Re: Typdeklarationen in C und Delphi
 
Ein offenes Array wird als zwei Parameter übergeben: Zeiger zu den Daten und höchster Index (d.h. Länge - 1). Außerdem solltest du natürlich kein Var nehmen, wenn du dich für Arrays entscheidest.

himitsu 24. Mär 2009 21:34

Re: Typdeklarationen in C und Delphi
 
dein Delphi könnte eventuell Types.TDoubleDynArray schon kennen :angel:

messie 26. Mär 2009 09:53

Re: Typdeklarationen in C und Delphi
 
Zitat:

Zitat von Uwe Raabe
Aber bei dem Float-Array kannst du mogeln (machen die C-Programmierer dauernd):
Delphi-Quellcode:
function DAQmxReadAnalogF64(taskHandle: PTaskHandle;
                            numSampsPerChan: INT32;
                            timeout: FLOAT64;
                            fillMode: BOOL32;
                            var readArray: FLOAT64;
                            arraySizeInSamps: UINT32;
                            var sampsPerChanRead: INT32;
                            reserved: Pointer): INT32 cdecl;
...
  DAQmxReadAnalogF64(TaskHandle, 1000, 10.0, DAQmx_Val_GroupByChannel, data[0], 1000, read, nil);
...

Das hat nicht geklappt. Ich habe auch mal probehalber mit einem festen array versucht, geht auch schief.
data habe ich als array of FLOAT64 deklariert. Was mache ich da falsch?


Zitat:

Zitat von Apollonius
Außerdem solltest du natürlich kein Var nehmen, wenn du dich für Arrays entscheidest.

Ich habe mich nicht entschieden, sondern bekomme das so vorgegeben. Aber wo ist das problem mit dem array als var-Parameter? Ich hatte das schon häufiger.

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 2 von 3     12 3      

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