Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

DLL-Aufruf verändert lokale Variable

  Alt 23. Jun 2009, 16:57
Hallo,

ich bin am verzweifeln...

Ich nutzt LibUSB-win32 um mit Delphi auf ein USB-Gerät zuzugreifen.


Das klappt auch einigermaßen, die DLL kapselt den Zugriff auf das Device.

Ich rufe im Prinzip nur die DLL-Funktionen auf.

Beispiel:

Gerät suchen und Verbinden

Delphi-Quellcode:
    result := 1;

    usb_init;


    if usb_find_busses < 0 then
      showmessage('usb_find_busses() failed');

    noDev := usb_find_devices;
    if noDev < 0 then
    begin
      showmessage('usb_find_devices() failed')
    end
    else
    begin
      ShowMessage('No. of Devices = '+IntToStr(noDev));
    end;

    bus := usb_get_busses;

    if bus = Nil then
      showmessage('usb_get_busses() failed');

    while Assigned(bus) do
    begin
      dev := bus^.devices;
      while Assigned(dev) do
      begin

        if (dev.descriptor.idVendor = VENDORID) and (dev.descriptor.idProduct = PRODUCTID) then
        begin
// showmessage(string(dev.filename) + ' RTC gefunden!');

           usb_handle := usb_open(dev); // HIER wird mit dem Gerät Verbindung aufgenommen

          if usb_handle = Nil then
          begin
            showmessage('can''t open usb device');
            result := -1;
          end;

          if usb_set_configuration(usb_handle, dev.config[0].bConfigurationValue) < 0 then
          begin
            showmessage('can''t set configuration for given usb device');
            result := -1;
          end;

          if usb_claim_interface(usb_handle, 0) < 0 then
          begin
            showmessage('can''t claim interface for given usb device');
            result := -1;
          end;
{
          if usb_set_altinterface(usb_handle, 0) < 0 then
          begin
            showmessage('can''t set altinterface for given usb device');
            result := -1;
          end;
}

// ShowMessage(IntToStr(laenge));
          if result = -1 then showmessage('Error: octopus_open_dev');

          exit;
        end;

        dev := dev^.next;
      end;
      bus := bus^.next;
    end;
Wenn jetzt

usb_handle := usb_open(dev); aufgerufen wird, dann sehe ich wie eine lokale Variable (deklariert im Button.Click) ihren Wert den ich vorher initialisiert habe auf 492887 springt...

Wie kann denn der DLL-Aufruf meine Variable verändern,..???

Vielen Dank schonmal

DelphiManiac
  Mit Zitat antworten Zitat