Einzelnen Beitrag anzeigen

daisychain

Registriert seit: 18. Jan 2006
Ort: Erlangen
3 Beiträge
 
#13

Re: USB Port abfragen mit Delphi?

  Alt 18. Jan 2006, 10:45

Hallo,
auch ich bin ein Anfänger.
Habe ähnliche Probleme gehabt.

Ich tippe dir hier ein paar Zeilen ab um den Unterschied zwischen C++ und delphi
zu veranschaulichen.
(nicht vollständig)

{---------------------------------Delphi-------------------------------------------------------------}


In diesem Anwendungsbeispiel werden die Arbeitsweisen und die Funktionen der K8055.DLL erklärt.
Auch werden die 2 wichtigsten DLL -Signale: OpenDevice und CloseDevice verdeutlicht.

Delphi-Quellcode:
unit xy;



interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, ExtCtrls, ComCtrls;
type
   TForm1 = class(TForm)
      GroupBox1: TGroupBox;
     SK6: TCheckBox;
      SK5: TCheckBox;
      Button1: TButton;
     Label1: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure Button1Click(Sender: TObject);
  private
    {  Private  declarations }
  public
    {  Public declarations  }
  end;

var
   Form1: TForm1;
   timed:boolean;

implementation

{$R  *.DFM}

function OpenDevice(CardAddress: Longint): Longint; stdcall; extern al 'K8055d.dll ';
procedure CloseDevice; std call; external 'K8 055d.dll';
function ReadAnalogChannel(Channel: Longint):Longint; stdcall; ext ernal 'K8055d.d ll';
procedure ReadAllAnalog(va r Data1, Data2: Longint); stdcall; exte rnal 'K8055d.d ll';
procedure OutputAnalogChannel(Channel: Longint; Data: Longint); std call; external
'K 8055d.dll';
procedure OutputAllAnalog(Data1: Longint; Data2: Longint); std call; external 'K 8055d.dll';
procedure ClearAnalogChannel(Channel: Longint); stdcall ; external 'K8055d .dll';
procedure ClearAllAnalog; stdcall; extern al 'K8055d.dll ';
procedure SetAnalogChannel(Channel: Longint); std call; external 'K 8055d.dll';
procedure SetAllAnalog; stdcall ; external 'K8055d .dll';
procedure WriteAllDigital(Data: Longint);stdcall; externa l 'K8055d.dll' ;
procedure ClearDigitalChannel(Channel: Longint); stdca ll; external 'K80 55d.dll';
procedure ClearAllDigital; stdcall; ex ternal 'K8055d. dll';
procedure SetDigitalChannel(Channel: Longint); stdcall; external 'K8055d.dll' ;
procedure SetAllDigital; stdca ll; external 'K80 55d.dll';
function ReadDigitalChannel(Channel: Longint): Boolean; stdcall ; external 'K8055 d.dll';
function ReadAllDigital: Longint; stdcall; ex ternal 'K8055d. dll';
function ReadCounter(CounterNr: Longint): Longint; stdcal l; external 'K805 5d.dll';
procedure ResetCounter(CounterNr: Longint); stdcall; ext ernal 'K8055d.d ll';
procedure SetCounterDebounceTime(CounterNr, DebounceTime:Longint); stdcal l; external
'K8055d.dll';


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   CloseDevice;
end;
procedure TForm1.Button1Click(Sender: TObject);
var h,CardAddr:longint;
begin
   CardAddr:= 3-(integer(SK5.Checked) + integer(SK6.Checked) * 2);
   h:= OpenDevice(CardAddr);
  case h of
     0..3: label12.caption:='Card '+ inttostr(h)+' connected';




{----------------------------C++--------------------------------------------------------}






In diesem Anwendungsbeispiel werden die Arbeitsweisen und die Funktionen der K8055.DLL erklärt.
Auch werden die 2 wichtigsten DLL -Signale: OpenDevice and CloseDevice verdeutlicht.
Code:
//Listing K8055D.h
#ifdef __cplusplus
extern "C" {
#endif
#define  FUNCTION __decl spec(dllim port)
FUNCTION long __stdcall OpenDevice(l ong CardAddress);
FUNCTION __ stdcall  CloseDevice();
FUNCTION long __ stdcall  ReadAnalogChannel(lon g Channel);
FUNCTION __stdcall  ReadAllAnalog(long *Data1, lo ng *Data2);
FUNCTION __stdca ll  OutputAnalogChannel(long Channel, long Data);
FUNCTION __stdc all OutputAllAnalog(lo ng Data1, long Data2);
FUNCTION __stdca ll  ClearAnalogChannel(long Channel);
FUNCTION __std call ClearAllAnalog();
FUNCTION __ stdcall  SetAnalogChannel(long Channel);
FUNCTION __s tdcall  SetAllAnalog();
FUNCTION __stdcall  WriteAllDigital(long Data);
FUNCTION __stdc all  ClearDigitalChannel(long Channel);
FUNCTION __st dcall  ClearAllDigital();
FUNCTI ON __stdc all  SetDigitalChannel(long Channel);
FUNCTION __s tdcall  SetAllDigital();
FUNCTION bool __st dcall  ReadDigitalChannel(long Channel);
FUNCTION l ong __std call ReadAllDigital();
FUNCTION lo ng __stdc all ReadCounter(long CounterNr);
FUNCTION __s tdcall  ResetCounter(long CounterNr);
FUNCTION __st dcall  SetCounterDebounceTime(long CounterNr, lo ng DebounceTime);
#ifdef __cplusplus
}
# endif
//Listing  Unit1.cpp
//------- ------------- ------------ ------------ ------------ ------------ -------
#include <vcl.h>
#pragma  hdrstop
#include "Unit1. h"
#include "K8055D. h"
//-------- ------------ ------------ ------------- ------------ ------------ ------
#pragma  package(smart_init)
#pragma  resource "*.dfm"
TForm1   *Form1;
//------- ------------- ------------ ------------ ------------ ------------- ------
__fastcall TForm1::TForm1(TComponent*   Owner)
         : TForm(Owner)
{
}
/ /----------- ------------ ------------ ------------ ------------- ------------ ---
void __ fastcall  TForm1::Connect1Click(TObject *Sender)
{
  int CardAddr = 3  - (int (CheckBox1->Checked) +   in t(CheckBox2->Checked)  *  2);
  int h = OpenDevice(CardAddr);
  switch (h) {
     case 0 :
     case  1 :
    case 2 :
    case 3 :
       Label1->Caption = "Card " + IntToStr(h) + " connected";
       break;
     case  -1 :



Label1->Caption = "Card " + IntToStr(CardAddr) +  " not found";
  }
}
//----- ------------ ------------ ------------- ------------ ------------ ---------
void __fastc all TForm1::FormClose(TObject *Sender,  TCloseAction &Action)
{
   CloseDevice;
}
//---- ------------ ------------ ------------ ------------- ------------ ----------
Wie du siehst musst du nur im Beispiel C++ Programm nachsehen was die dll kann.
dannach im implementationsteil von delphi als external deklarieren.
nachsehen wie das Teil angesprochn wird und in delphi einfügen
(cardadress...)
Danach einfach die entsprechende Funktion oder Procedure mit ihren Parametern aufrufen

Fertig - wenn du noch porbleme hast einfach per mail rühren.
Bei mir hats am Anfang auch nicht geklappt.
Wenn mans mal raushat gehts dann dafür bei all diesen Systemen.
Bei mir mitlerweile bei drei einwandfrei.

[edit=Sharky]Delphi- und C-Tags gesetzt. Mfg, Sharky[/edit]
Schenke ein lächeln - der Tag wird schön!
  Mit Zitat antworten Zitat