FAQ


 
Oft gestellte Fragen - hier die Antworten
FAQ steht für "frequently asked questions"

  Zurück zur Übersicht



Treiber Beispiele

Für Visual-BASIC:

Wie öffne ich den KLibDrv-Treiber mit einem handle unter Visual-BASIC ?

'* Beispiel Treiberaktivierung in VB6
Private Sub Form_Load()
    HW32 = OpenTVicHW32(HW32, "KLIBDRV", "KLIBDevice0")
    ActiveHW = GetActiveHW(HW32)
    If ActiveHW Then
      ' Form1.Caption = "Driver is started"
       Call SetHardAccess(HW32, 0) ' Direktzugriff ohne Rücksicht auf andere Treiber
    Else
       Call MsgBox("Can't open the driver!", 0, "Warning!")
    End If
End Sub

Wie schließe ich den handle unter VB6 ?

Private Sub Form_Terminate()
  CloseTVicHW32 (HW32)
  If ActiveHW Then HW32 = CloseTVicHW32(HW32)
  ActiveHW = False
  Unload Form1
End Sub

Wie lauten die Funktions-Aufrufe ? 

Public Declare Function OpenTVicHW32 Lib "KlibDrv.dll" _
                                     (ByVal HW32 As Long, _
                                      ByVal ServiceName As String, _
                                      ByVal EntryPoint As String) As Long

Public Declare Function CloseTVicHW32 Lib "KlibDrv.dll" (ByVal HW32 As Long) As Long
Public Declare Function GetActiveHW Lib "KlibDrv.dll" (ByVal HW32 As Long) As Long
Public Declare Sub SetHardAccess Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal HardAccess As Long)
Public Declare Function GetHardAccess Lib "KlibDrv.dll" (ByVal HW32 As Long) As Long
Public Declare Function GetPortByte Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long) As Byte
Public Declare Function GetPortWord Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long) As Integer
Public Declare Sub SetPortByte Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long, ByVal nNewValue As Byte)
Public Declare Sub SetPortWord Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long, ByVal nNewValue As Integer)
Public Declare Sub SetPortLong Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long, ByVal nNewValue As Long)
Public Declare Function GetPortLong Lib "KlibDrv.dll" (ByVal HW32 As Long, ByVal PortAddr As Long) As Long
Public Declare Sub ReadPortFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Sub ReadPortWFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Sub ReadPortLFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Sub WritePortFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Sub WritePortWFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Sub WritePortLFIFO Lib "KlibDrv.dll" (ByVal HW32 As Long, ByRef pBuffer As Any)
Public Declare Function GetLastPciBus Lib "KlibDrv.dll" (ByVal HW32 As Long) As Integer
Public Declare Function GetHardwareMechanism Lib "KlibDrv.dll" (ByVal HW32 As Long) As Integer

Public Declare Function GetPciDeviceInfo Lib "KlibDrv.dll" _
                                        (ByVal HW32 As Long, _
                                         ByVal bus As Integer, _
                                         ByVal Device As Integer, _
                                         ByVal Fun As Integer, _
                                         ByRef CfgInfo As Any) As Long

Wie kann man unter VB6 ein "out32w" (word) nach alter Schreibweise programmieren ?

Public Sub Out32w(adr, value_w)
  Call SetPortWord(HW32, adr, value_w)
End Sub


Für Delphi:

Wie kann man unter Delphi die KLibDrv.DLL einbinden ?

uses
  Forms,
  PciForm in 'PciForm.pas' {MainForm},
  KlibDrv in 'KlibDrv.pas';
{$R *.RES}
. . .
unit PciForm;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Spin, Grids, ComCtrls, IniFiles,  KLibDrv, Hw_Types;

Wie öffne ich den KLibDrv-Treiber unter Delphi ?

procedure TMainForm.B_OpenDriverClick(Sender: TObject);
var buff : array[0..24] of Char;
begin
  HW32 := 0;
  HW32 := OpenTVicHW32(HW32,'KLibDrv',StrPCopy(buff,R_Unit.Items[R_Unit.ItemIndex]));
  ActiveHW := GetActiveHW(HW32);
  if not ActiveHW then ShowMessage('Kann Treiber nicht öffnen!');
  ShowButtons(ActiveHW);
end;

Wie schließt man den KLibDrv-Treiber unter Delphi?

procedure TMainForm.B_CloseDriverClick(Sender: TObject);
begin
  if hPciDevice<>0 then ClosePciDevice(HW32,hPciDevice);
  HW32 := CloseTVicHW32(HW32);
  ActiveHW := FALSE;
  ShowButtons(ActiveHW);
end;

Wie schreibt und ließt man bytes als I/O-Port Befehl unter Delphi ?

// ---- write port ----
procedure TMainForm.Button1Click(Sender: TObject);
var port   : Byte;
    adress : DWORD;
begin
port := StrToInt(Edit2.Text);
adress := HexToInt(Edit1.Text);
if ((StrToInt(Edit2.Text)) > 255) then ShowMessage('(0...255) Zahl ist ausserhalb von Byte !');
SetPortByte( HW32, adress, port);
end;

// ---- read port ----
procedure TMainForm.Button2Click(Sender: TObject);
var port   : Byte;
    adress : DWORD;
    s3     : String;
begin
adress := HexToInt(Edit1.Text);
port := GetPortByte( HW32, adress);
s3 := IntToStr(port);
Edit2.Text := (s3);
end;


Für CPP / C++:

Wie includiere ich die KLibDrv-Library unter C++ ?

#include <vcl.h>
#pragma hdrstop
USERES("portio.res");
USEFORM("Unit1.cpp", Form1);
USELIB("C:\Lib\klibdrv32.lib");

Wie erfolgt ein Port-Zugriff unter C++ auf den KLibDrv-Treiber ?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 SetPortByte(HW32, baseadress+offset, byte);
}

Gibt es ein einfaches C++ Beispiel, wie Karten über den KLibDrv-Treiber programmiert werden ?

// portctestDlg.cpp : Implementierungsdatei
//

#include "stdafx.h"
#include "portctest.h"
#include "portctestDlg.h"
#include <winsvc.h>
#include "Klibdrv32.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Initialisierung von globalen Variablen

HANDLE      HwCtrl=NULL;
BOOL      ActiveHW    = FALSE;

PVOID              PointPhys   = NULL;
DWORD              PhysAddr = 0;

BYTE               membuffer[256];
long      vid;
long      did;
USHORT      Anzahl_Proto3 = 0;
USHORT      Anzahl_PCI = 0;
ULONG      base1 = 0;
ULONG      base2 = 0;
ULONG      base3 = 0;
ULONG      base4 = 0;
ULONG      base5 = 0;
ULONG      base6 = 0;
char               buffer[255];
HFONT            hFontMemdump = 0;
UINT               TimerID = 0;
HANDLE             hDlg;

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

// Dialogfelddaten
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // Vom Klassenassistenten generierte Überladungen virtueller Funktionen
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
 //}}AFX_VIRTUAL

// Implementierung
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // Keine Nachrichten-Handler
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPortctestDlg Dialogfeld

CPortctestDlg::CPortctestDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CPortctestDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CPortctestDlg)
 m_offset = 0;
 m_wert = 0;
 //}}AFX_DATA_INIT
 // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPortctestDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CPortctestDlg)
 DDX_Text(pDX, IDC_OFFSET, m_offset);
 DDV_MinMaxLong(pDX, m_offset, 0, 65535);
 DDX_Text(pDX, IDC_WERT, m_wert);
 DDV_MinMaxByte(pDX, m_wert, 0, 255);
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPortctestDlg, CDialog)
 //{{AFX_MSG_MAP(CPortctestDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_PCIScan, OnPCIScan)
 ON_BN_CLICKED(IDFragez, OnFragez)
 ON_BN_CLICKED(IDC_PCIWrite, OnPCIWrite)
 ON_BN_CLICKED(IDC_PCIRead, OnPCIRead)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPortctestDlg Nachrichten-Handler

BOOL CPortctestDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Hinzufügen des Menübefehls "Info..." zum Systemmenü.

 // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  { 
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
 //  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
 SetIcon(m_hIcon, TRUE);   // Großes Symbol verwenden
 SetIcon(m_hIcon, FALSE);  // Kleines Symbol verwenden

 // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

 HwCtrl = 0;

 GetDlgItem(IDC_COMBOBOXEX1)->EnableWindow(false);
 GetDlgItem(IDC_PCIWrite)->EnableWindow(false);
 GetDlgItem(IDC_PCIRead)->EnableWindow(false);
 GetDlgItem(IDC_OFFSET)->EnableWindow(false);
 GetDlgItem(IDC_WERT)->EnableWindow(false);
 

    HwCtrl = OpenTVicHW32(HwCtrl,"KLIBDRV","KLIBDevice0");

 if (!HwCtrl || !GetActiveHW(HwCtrl)){

  MessageBeep(0);
  MessageBox("Can't open the driver!",
          " Warning! ",MB_OK | MB_ICONWARNING);
 }
 else {
   ActiveHW = TRUE;
 };

 return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

void CPortctestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
//  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
//  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.

void CPortctestDlg::OnPaint() 
{
 if (IsIconic())
 {
  CPaintDC dc(this); // Gerätekontext für Zeichnen

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Symbol in Client-Rechteck zentrieren
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Symbol zeichnen
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

// Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
//  das zum Symbol verkleinerte Fenster mit der Maus zieht.
HCURSOR CPortctestDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}

void CPortctestDlg::OnPCIScan() 
{
 // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
 char header[] = " Nr.  VendorID   DeviceID     BaseAdress      Bezeichung";
 WORD  buses,n,bus,dev,func;
 PCI_COMMON_CONFIG Info;
 Anzahl_PCI = 0;
 base1=0;
 base2=0;
 base3=0;
 base4=0;
 base5=0;
 base6=0;

    SendDlgItemMessage( IDC_Textfenster, LB_RESETCONTENT, 0, 0);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)header);

    buses = GetLastPciBus(HwCtrl);
 

 n = 0;

    if (buses>=0) {
 

  for (bus = 0; bus<=buses; bus++) {

   for (dev = 0; dev<32; dev++) {

    for (func= 0; func<8; func++) {
 

                    if ( GetPciDeviceInfo(HwCtrl,bus,dev,func,&Info) &&
                         (Info.VendorID == 0x1001) &&
                         (Info.DeviceID != 0xFFFF) ) {

      n++;
 

                        switch (Info.HeaderType & 0x7F) {
       case 0x00:  // non-bridge
        sprintf((char*)membuffer,"    0x%08x",(Info.u.type0.BaseAddresses[0]-1));
        break;
       case 0x01:  // bridge
        sprintf((char*)membuffer,"    0x%08x",Info.u.type1.BaseAddresses[0]);
        break;
       case 0x02:
           sprintf((char*)membuffer,"    0x%08x",Info.u.type2.Range[0].Base);
                                break;
      }
      switch (Anzahl_PCI){
       case 0:
        base1 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
        break;
       case 1:
        base2 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
        break;
       case 2:
        base3 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
        break;
       case 3:
        base4 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
        break;
       case 4:
        base5 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
       case 5:
        base6 = (Info.u.type0.BaseAddresses[0]-1);
        Anzahl_PCI = Anzahl_PCI + 1;
        break;
      }
                        sprintf(buffer, "  %01x    0x%04x       0x%04x    ",Anzahl_PCI,Info.VendorID,Info.DeviceID,Info.HeaderType & 0x0f);

      strcat(buffer,(char*)membuffer);

                        switch (Info.DeviceID) {
       case 0x0010: 
        sprintf((char*)membuffer,"      PCI-1616 TTL I/O");
        break;
       case 0x0011: 
        sprintf((char*)membuffer,"      OPTO-PCI /N od. /P");
        break;
       case 0x0012: 
        sprintf((char*)membuffer,"      PCI-ADxx od. PCI-DAC4 od. PCI-ADTERM");
        break; 
       case 0x0013: 
        sprintf((char*)membuffer,"      PCI-OPTOREL od. PCI-Relais");
        break;
       case 0x0014: 
        sprintf((char*)membuffer,"      PCI-Counter-1, 3x25bit U/D od. PCI-Timer");
        break;
       case 0x0015: 
        sprintf((char*)membuffer,"      PCI-DAC415");
        break;
       case 0x0016:
           sprintf((char*)membuffer,"      PCI-MFB");
                                break;
       case 0x0017:
           sprintf((char*)membuffer,"      PCI-PROTO3");
                                break;
      }

      strcat(buffer,(char*)membuffer);

            SendDlgItemMessage(IDC_Textfenster, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR)buffer);

                       if (((Info.HeaderType & 0x80) == 0) && (func==0)) break;
     }
    }
   }
  }
 }
 GetDlgItem(IDC_COMBOBOXEX1)->EnableWindow(true);
 GetDlgItem(IDC_PCIWrite)->EnableWindow(true);
 GetDlgItem(IDC_PCIRead)->EnableWindow(true);
 GetDlgItem(IDC_OFFSET)->EnableWindow(true);
 GetDlgItem(IDC_WERT)->EnableWindow(true); 
}

void CPortctestDlg::OnFragez() 
{
 char txtkolter []= "";
 char txtkolter1 []= "KOLTER ELECTRONIC";
 char txtkolter2 []= "Steinstrasse 22";
 char txtkolter3 []= "50374 Erftstadt";
 char txtkolter4 []= "Tel.: 02235/76707";
 char txtkolter5 []= "FAX:  02235/72048";
 char txtkolter6 []= " ";
 char txtkolter7 []= "Homepage:";
 char txtkolter8 []= "http:\\\\www.pci-card.com";
 SendDlgItemMessage( IDC_Textfenster, LB_RESETCONTENT, 0, 0);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter1);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter2);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter3);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter4);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter5);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter6);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter7);
 SendDlgItemMessage( IDC_Textfenster, LB_ADDSTRING, 0,(LPARAM)txtkolter8);
 GetDlgItem(IDC_COMBOBOXEX1)->EnableWindow(false);
 GetDlgItem(IDC_PCIWrite)->EnableWindow(false);
 GetDlgItem(IDC_PCIRead)->EnableWindow(false);
 GetDlgItem(IDC_OFFSET)->EnableWindow(false);
 GetDlgItem(IDC_WERT)->EnableWindow(false);

}

void CPortctestDlg::OnPCIWrite() 
{
 int auswahl_proto3;
 CComboBox* AuswahlBox;
 AuswahlBox = (CComboBox*) GetDlgItem(IDC_COMBOBOXEX1);
 UpdateData(TRUE);
 auswahl_proto3=AuswahlBox->GetCurSel();
 if (auswahl_proto3==CB_ERR){
  MessageBeep(0);
  MessageBox("Bitte wählen Sie eine PCI-Karte aus!",
          " Hinweis! ",MB_OK | MB_ICONWARNING);
 }

 switch (auswahl_proto3){
  case 0:
   if (base1==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   SetPortByte(HwCtrl,(base1+m_offset),(UCHAR)m_wert);
   break;
  case 1:
   if (base2==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   SetPortByte(HwCtrl,(base2+m_offset),(UCHAR)m_wert);
   break;
  case 2:
   if (base3==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   SetPortByte(HwCtrl,(base3+m_offset),(UCHAR)m_wert);
   break;
  case 3:
   if (base4==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   SetPortByte(HwCtrl,(base4+m_offset),(UCHAR)m_wert);
   break;
  case 4:
   if (base5==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   SetPortByte(HwCtrl,(base5+m_offset),(UCHAR)m_wert);
   break;
  case 5:
   if (base6==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
 SetPortByte(HwCtrl,(base6+m_offset),(UCHAR)m_wert);
 break;
 }

}

void CPortctestDlg::OnPCIRead() 
{
 int auswahl_proto3;
 CComboBox* AuswahlBox;
 AuswahlBox = (CComboBox*) GetDlgItem(IDC_COMBOBOXEX1);
 UpdateData(TRUE);
 auswahl_proto3=AuswahlBox->GetCurSel();
 if (auswahl_proto3==CB_ERR){
  MessageBeep(0);
  MessageBox("Bitte wählen Sie eine PCI-Karte aus!",
          " Hinweis! ",MB_OK | MB_ICONWARNING);
 }
 switch (auswahl_proto3){
  case 0:
   if (base1==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   m_wert=GetPortByte(HwCtrl,(base1+m_offset));
   break;
  case 1:
   if (base2==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   m_wert=GetPortByte(HwCtrl,(base2+m_offset));
   break;
  case 2:
   if (base3==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   m_wert=GetPortByte(HwCtrl,(base3+m_offset));
   break;
  case 3:
   if (base4==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   m_wert=GetPortByte(HwCtrl,(base4+m_offset));
   break;
  case 4:
   if (base5==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
   m_wert=GetPortByte(HwCtrl,(base5+m_offset));
   break;
  case 5:
   if (base6==0){
    MessageBeep(0);
    MessageBox("Bitte wählen Sie eine vorhanden PCI-Karte aus!",
            " Hinweis! ",MB_OK | MB_ICONWARNING);
    break;
   }
 m_wert=GetPortByte(HwCtrl,(base6+m_offset));
 break;
 }

 UpdateData(FALSE);

}
 
 



KOLTER ELECTRONIC ist nicht für die Inhalte fremder Seiten verantwortlich.
Es gelten ausschließlich die AGB der Firma KOLTER ELECTRONIC.
Für die Richtigkeit der Angaben wird keine Gewähr übernommen.
Alle Preisangaben sind gewerblich. Das Zahlungsmittel ist EURO.
Alle Rechte vorbehalten.(c) copyright H.Kolter

[ Zur KOLTER ELECTRONIC® Hauptseite ]