Einzelnen Beitrag anzeigen

multi-man

Registriert seit: 10. Jul 2008
16 Beiträge
 
Delphi 7 Professional
 
#12

Re: DLL einbinden octopus.dll

  Alt 25. Jul 2008, 02:41
Zitat von Luckie:
Zitat von multi-man:
Speicher reserviert ? Wohl eher nicht
Aber hier mal der Code :
Delphi-Quellcode:
function octopus_init(var context: octopus_context): integer; external 'octopus.dll';

function octopus_get_hwdesc(var context: octopus_context; desc: Pchar): Pchar; external 'octopus.dll';

function octopus_open(context: octopus_context): integer; external 'octopus.dll';
Bei dir fehlen überall die Aufrufkonventionen.
Danke, das ist mittlerweile behoben !


Zitat von omata:
Versuch es mal so...
Delphi-Quellcode:
type
  octopus_context = packed record
    usb_handle : integer;
    error_str : pchar;
  end;
  Poctopus_context = ^octopus_context;

function octopus_init(context: Poctopus_context): integer; stdcall; external 'octopus.dll';
function octopus_open(context: Poctopus_context): integer; stdcall; external 'octopus.dll';
Aufruf...
Delphi-Quellcode:
var context:Poctopus_context;
begin
  new(context);
  try
    if octopus_init(context) = 0 then
      raise Exception.Create(context.error_str);

    if octopus_open(context) < 0 then
      raise Exception.Create(context.error_str);

  finally
    dispose(context);
  end;
end;
Das Init läuft durch, beim Open erhalte ich die folgende Meldung: "could not found octopus device with pid and vid". Diese Meldung ist ja schonmal vielversprechend, ich habe ja auch kein Gerät. Aber es kommt eben auch keine Access Violation mehr.
Danke für den guten Ansatz, Init läuft durch mit 1 und open läuft auch durch ohne exception und mit returnwert 1, allerdings bekomme ich jetzt im error_str die Meldung "can't set configuration for given usb device" .

Das ist jetzt wohl wahrscheinlich nicht mehr delphi-spezifisch ... Habe allerdings gerade nochmal in Python an dem selben Rechner das Teil probiert, und da funktioniert es wunderbar ...

Aber der Aufruf scheint ja eigentlich zu stimmen, sonst würde ja nicht 1 und der error_str zurückkommen ...
Vielleicht stimmt an der dll was nicht ..

Ich werd mal weiter forschen ...

Falls noch jemand ne Idee hat, lasst es mich wissen
  Mit Zitat antworten Zitat