Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WinAPI Funktionen - Problem mit der FTD2xx.dll ?! (https://www.delphipraxis.net/120963-winapi-funktionen-problem-mit-der-ftd2xx-dll.html)

braini4c 19. Sep 2008 14:50


WinAPI Funktionen - Problem mit der FTD2xx.dll ?!
 
Hallo,

ich versuche ein USB Oszilloskop anzusteuern.
MEphisto Scope
Dort gibt es auch Programmierbeispiele für C++ und Delphi.
Der C++ Code funktioniert. Der für Delphi leider nicht.

Bisher klappt es soweit:
Das Device kann geöffnet werden ("FT_Open")
Ich kann darauf schreiben ("FT_Write")

Bei der Funktion "FT_Read" allerdings hängt sich das Programm auf und es passiert nichts weiter.

Die Funktionen sind folgendermaßen deklariert:
Delphi-Quellcode:
function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_Open';
function FT_Write(ftHandle:Dword; FTOutBuf : Pointer; BufferSize : LongInt; ResultPtr : Pointer ) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_Write';
function FT_Read(ftHandle:Dword; FTInBuf : Pointer; BufferSize : LongInt; ResultPtr : Pointer ) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_Read';
*edit: FT_DLL_name ist 'FTD2XX.dll'

in C++ sieht das ganze so aus:

Code:
#ifdef __cplusplus
extern "C" {
#endif
...
FTD2XX_API
FT_STATUS WINAPI FT_Read(
    FT_HANDLE ftHandle,
    LPVOID lpBuffer,
    DWORD nBufferSize,
    LPDWORD lpBytesReturned
    );

FTD2XX_API
FT_STATUS WINAPI FT_Write(
    FT_HANDLE ftHandle,
    LPVOID lpBuffer,
    DWORD nBufferSize,
    LPDWORD lpBytesWritten
    );
...
}
Hat jemand eine Idee woran das liegen könnte? Ich hab offen gestanden keinen blassen Schimmer.
Ich hab keine Ahnung was der C Compiler daraus macht (im Vergleich zum Delphi oder C++ Kompiler)

Bin für jede Hilfe dankbar

MfG
Julian

turboPASCAL 19. Sep 2008 15:29

Re: WinAPI Funktionen - Problem mit der FTD2xx.dll ?!
 
versuch's mal so:

Delphi-Quellcode:
const
  FT_DLL_NAME = 'FTD2XX.dll';

type
  FT_Result: Integer; // ?
 
function FT_Read(ftHandle: DWORD; FTInBuf: Pointer; BufferSize: DWORD; ResultPtr: LPDWORD): FT_Result; cdecl; External FT_DLL_NAME name 'FT_Read';
function FT_Write //...

braini4c 19. Sep 2008 16:25

Re: WinAPI Funktionen - Problem mit der FTD2xx.dll ?!
 
Hey Matti,

hat leider nichts geholfen.
Bleibt immer noch hängen.

Wenn ich z.B. FT_Open mit der "Calling Convention" ( - wie ich eben nachgeschaut habe ;-)) cdecl aufrufe gibts auch nen exception raise (von wegen Zugriffsverletzung ..)

Gäbe es als Alternative die Möglichkeit irgendwie den C Code einzubinden? (diesen nochmal in eine .dll auszulagern o.ä.) ?!

soweit schonmal vielen Dank für die Bemühungen
Julian

OldGrumpy 19. Sep 2008 17:50

Re: WinAPI Funktionen - Problem mit der FTD2xx.dll ?!
 
Mit dem FTDI chip arbeite ich auch. Ich schau mal eben in meine Unit rein, editier dann gleich meinen Beitrag.

Delphi-Quellcode:
Function FT_Read(ftHandle : Dword; FTInBuf : Pointer; BufferSize : Longint; ResultPtr : Pointer) : FT_Result; STDCALL; EXTERNAL FT_DLL_Name NAME 'FT_Read';
So ist FT_Read hier deklariert und funktioniert. Wichtig ist halt, dass ResultPtr ein Pointer auf die Variable für die Rückgabe ist. Der Rest ist eigentlich unkritisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 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