![]() |
Bluetoothinterface
Hallo zusammen!
Ich versuche mich gerade an einer Interfacesteuerkarte, wozu leider nur Beispielprogramme in C und VB mitgeliefert sind. In C und VB hab ich bisher fast nichts gemacht, daher hoffe ich, dass hier jemand C oder VB kann, und aus dem ganzen schlau wird. Folgend die Funktion aus der DLL und ihren Aufruf, die ich nach Delphi transkribieren möchte in C :
Delphi-Quellcode:
dann wird die Funktion an einer einzigen Stelle (in einem Timer) aufgerufen:
HB625_API BOOL WINAPI Read_All_Channel( short int* Result_Array, unsigned char* error ); //liesst alle 8 Analogen Eingänge ein, und gibt die Werte in einem Array "Result_Array", das vorher als "short int U[8]" definiert wurde zurück.
Delphi-Quellcode:
in der if-Abfrage werden hier wohl gleich die Messwerte in das Array U[8] geschrieben, anders kann ich mir nicht erklären wo das geschehen soll...zumindest gibt es keine andere Stelle im Code, an der die Funktion erneut aufgerufen wird, und das Beispielprogramm funktioniert ja...
if( Read_All_Channel(U, &Error) )
{ printf("U1=%4dmV; U2=%4dmV; U3=%4dmV; U4=%4dmV;\n", U[0], U[1], U[2], U[3]); printf("U5=%4dmV; U6=%4dmV; U7=%4dmV; U8=%4dmV;\n\n", U[4], U[5], U[6], U[7]); } else { printf("Error: %d;\n", Error); Loop = FALSE; } in VB sieht das ganze ziemlich identisch aus, hier wird auch das Array "U(7) As Short"(also 0..7) verwendet. Nun möchte ich den Code in Delphi transferieren, hierbei erste Konfusion, da Shor-Integer Typ (+-16Bit) in C und VB = Small-Integer in Dp. sind. Versuch:
Delphi-Quellcode:
Frage :
var
//... U : Array [0..7] of Smallint; implementation Function Read_All_Channel(Result_Array : Smallint) : Boolean ; stdcall; external 'hb625.dll'; // dll ist wohl richtig eingebunden. Wie kann ich diese Funktion aufrufen?, Wenn ich nämlich den hier mache:
Delphi-Quellcode:
Dann darf hier U kein Array sein, bzw. man kann das Array nicht so analog zu C /VB definieren, da es sonst mit dem Typ aus der Funktion nicht kompatibel ist. d.h. ich müsste es in der Funktion anpassen,
if Read_All_Channel(U) = true then...
also so was ähnliches wie:
Delphi-Quellcode:
geht aber so anscheinend generell nicht, da es beim Aufruf dann eine Fehlermeldung mit Zugriffsverletzung bei diversen Adressen gibt.
Function Read_All_Channel(Result_Array : Array of Smallint) : Boolean ; stdcall; external 'hb625.dll';
(Aus dem Assemblercode werd ich erstmal auch nicht schlauer) Wie kann ich hier überhaupt erreichen, dass mir die Funktion die Werte in ein Array schreibt?, bzw. wie kann ich der Funktion ein geeignetes Array (Smallint [0..7] zur Verfügung stellen? Wäre cool, wenn mir jemand hier weiterhelfen kann! Grüße |
Re: Bluetoothinterface
Hallo hb625,
wenn in der C++ funktion ein pointer übergeben wird, dann solltest du doch auch einen pointer übergeben also vielleicht so
Delphi-Quellcode:
die in eine extra Untit vielleicht uBluetooth die dann eingebunden wird;type TResult_Array = Array[0..7] of SmallInt; pTResult_Array = ^TResult_Array; Function Read_All_Channel(pResult_Array : pTResult_Array) : Boolean ; stdcall; implementation Function Read_All_Channel external 'hb625.dll' name 'Read_All_Channel'; // dll ist wohl richtig eingebunden. aufgerufen in der App
Delphi-Quellcode:
oder so ähnlichuses uBluetooth; var pU : pTResult_Array; e1 : small_Int; implementation Read_All_Channel(pU); e1 := pU^[0]; gruß stefan |
Re: Bluetoothinterface
Hallo,
ich würde statt Boolen als Rückgabewert lieber LongBool nehmen. Ciao Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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