AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bluetoothinterface

Offene Frage von "hb625"
Ein Thema von hb625 · begonnen am 25. Okt 2009 · letzter Beitrag vom 27. Okt 2009
Antwort Antwort
hb625

Registriert seit: 25. Okt 2009
1 Beiträge
 
#1

Bluetoothinterface

  Alt 25. Okt 2009, 16:22
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 :

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. dann wird die Funktion an einer einzigen Stelle (in einem Timer) aufgerufen:

Delphi-Quellcode:
 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 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...
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:
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.
Frage :

Wie kann ich diese Funktion aufrufen?, Wenn ich nämlich den hier mache:
if Read_All_Channel(U) = true then... 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,

also so was ähnliches wie:

Function Read_All_Channel(Result_Array : Array of Smallint) : Boolean ; stdcall; external 'hb625.dll'; geht aber so anscheinend generell nicht, da es beim Aufruf dann eine Fehlermeldung mit Zugriffsverletzung bei diversen Adressen gibt.
(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
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#2

Re: Bluetoothinterface

  Alt 27. Okt 2009, 11:54
Hallo hb625,

wenn in der C++ funktion ein pointer übergeben wird, dann solltest du doch auch einen pointer übergeben

also vielleicht so

Delphi-Quellcode:

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.
die in eine extra Untit vielleicht uBluetooth die dann eingebunden wird;

aufgerufen in der App



Delphi-Quellcode:

uses uBluetooth;
var
   pU : pTResult_Array;
   e1 : small_Int;

implementation

   Read_All_Channel(pU);

   e1 := pU^[0];
oder so ähnlich

gruß

stefan
  Mit Zitat antworten Zitat
Chris.R

Registriert seit: 8. Sep 2009
Ort: Nürnberg
68 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Bluetoothinterface

  Alt 27. Okt 2009, 12:03
Hallo,

ich würde statt Boolen als Rückgabewert lieber LongBool nehmen.

Ciao Chris
Guten Morgen! … Und falls wir uns heute nicht mehr sehen, Guten Tag, Guten Abend und Gute Nacht!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:20 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