Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 10:27:52
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Einsteiger Forum
| | |-+  Hilfe! C-Headerkonvertierung
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Hilfe! C-Headerkonvertierung  (Gelesen 1706 mal)
tommyjunge
Full Member
***
Offline Offline

Beiträge: 162



« am: 30.04.2009, 09:24:18 »

Hallo,

ich muss auf eine dll zugreifen, zu der es nur einen C-Header gibt. Da ich C-Analphabet bin und in Delphi auch noch nichts mit dlls gemacht habe, habe ich es mit Dr. Bob's automatischem Konvertierer headconv versucht. Der erzeugte Code lässt sich aber nicht einmal compilieren. Wer kann mir weiter helfen?

Hier die einigermassen knappe C-Headerdatei:
Code:
class VNADevice
{
private:
bool Result; // DeviceIoControl result
int state; // -1=no device +1=device OK
class Helper * d; // holds the USB device state

void GetHandle(void);
void ReleaseHandle(void);
bool ToggleReset(bool hold);

public:
__declspec(dllexport) VNADevice(); // Constructor: open device,
// set state
__declspec(dllexport) ~VNADevice(); // Destructor: release objects and
// structs
__declspec(dllexport) bool Init(void); // Build descriptors, get pipes
__declspec(dllexport) int get_State(); // -1 = no device  +1 = device OK
__declspec(dllexport) bool Start(); // Release reset of the 8051
// processor on VNA
__declspec(dllexport) bool Stop(); // Halt the 8051 processor on VNA
__declspec(dllexport) int get_Instance(); // get instance of VNA (0..9)
__declspec(dllexport) bool set_Instance(int instance); // set instance (0..9) __declspec(dllexport) int get_BytesReturned();
__declspec(dllexport) bool Read(VNA_RXBUFFER * readbuf);
__declspec(dllexport) bool Write(VNA_TXBUFFER * writebuf, int message_size);
};

// emulation of parallel port driver interface
bool __declspec(dllexport) _stdcall Out32(short PortAddress, short data);
WORD __declspec(dllexport) _stdcall Inp32(short PortAddress);

// simple VNA usb interface
bool __declspec(dllexport) _stdcall vnawrite(void *message, short bytecount);
bool __declspec(dllexport) _stdcall vnaread(void *message, short *bytecount);

Und hier, was headconv daraus gemacht hat:
Code:
unit VNADLL;
{**************************************************************************}
{                                                                          }
{    This C DLL header file first (automatic) conversion generated by:     }
{    HeadConv 4.0 (c) 2000 by Bob Swart (aka Dr.Bob - www.drbob42.com)     }
{      Final Delphi-Jedi (Darth) command-line units edition                }
{                                                                          }
{    Generated Date: 29.04.2009                                            }
{    Generated Time: 22:49:06                                              }
{                                                                          }
{**************************************************************************}

interface
uses
{$IFDEF WIN32}
  Windows;
{$ELSE}
  Wintypes, WinProcs;
{$ENDIF}


{=> d:\delphidll\headconv\VNADLL.H <=}


var
  GetHandle: procedure cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  ReleaseHandle: procedure cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  ToggleReset: function(hold: Bool): Bool cdecl  {$IFDEF WIN32} stdcall {$ENDIF};

var
  __declspec: function(VNADevice(: var DLLEXPORT)): UBLIC: cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
{/// set state }
var
  __declspec: function(~VNADevice(: DLLEXPORT)): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
{/// structs }
var
  __declspec: function(Init(void: DLLEXPORT) BOOL): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(get_State(: DLLEXPORT) INT): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(Start(: DLLEXPORT) BOOL): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
{/// processor on VNA }
var
  __declspec: function(Stop(: DLLEXPORT) BOOL): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(get_Instance(: DLLEXPORT) INT): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(instance: DLLEXPORT) BOOL SET_INSTANCE(INT): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(var readbuf: DLLEXPORT) BOOL READ(VNA_RXBUFFER): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(var writebuf: DLLEXPORT) BOOL WRITE(VNA_TXBUFFER;
                       message_size: Integer): Integer cdecl  {$IFDEF WIN32} stdcall {$ENDIF};

{/// emulation of parallel port driver interface }
var
  __declspec: function(PortAddress: DLLEXPORT) _STDCALL OUT32(SHORT;
                       data: SmallInt): Bool cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(PortAddress: DLLEXPORT) _STDCALL INP32(SHORT): Word cdecl  {$IFDEF WIN32} stdcall {$ENDIF};

{/// simple VNA usb interface }
var
  __declspec: function(var message: DLLEXPORT) _STDCALL VNAWRITE(VOID;
                       bytecount: SmallInt): Bool cdecl  {$IFDEF WIN32} stdcall {$ENDIF};
var
  __declspec: function(var message: DLLEXPORT) _STDCALL VNAREAD(VOID;
                       var bytecount: SmallInt): Bool cdecl  {$IFDEF WIN32} stdcall {$ENDIF};


var
  DLLLoaded: Boolean { is DLL (dynamically) loaded already? }
    {$IFDEF WIN32} = False; {$ENDIF}

implementation

var
  SaveExit: pointer;
  DLLHandle: THandle;
{$IFNDEF MSDOS}
  ErrorMode: Integer;
{$ENDIF}

  procedure NewExit; far;
  begin
    ExitProc := SaveExit;
    FreeLibrary(DLLHandle)
  end {NewExit};

procedure LoadDLL;
begin
  if DLLLoaded then Exit;
{$IFNDEF MSDOS}
  ErrorMode := SetErrorMode($8000{SEM_NoOpenFileErrorBox});
{$ENDIF}
  DLLHandle := LoadLibrary('VNADLL.DLL');
  if DLLHandle >= 32 then
  begin
    DLLLoaded := True;
    SaveExit := ExitProc;
    ExitProc := @NewExit;
    @GetHandle := GetProcAddress(DLLHandle,'GetHandle');
  {$IFDEF WIN32}
    Assert(@GetHandle <> nil);
  {$ENDIF}
    @ReleaseHandle := GetProcAddress(DLLHandle,'ReleaseHandle');
  {$IFDEF WIN32}
    Assert(@ReleaseHandle <> nil);
  {$ENDIF}
    @ToggleReset := GetProcAddress(DLLHandle,'ToggleReset');
  {$IFDEF WIN32}
    Assert(@ToggleReset <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
    @__declspec := GetProcAddress(DLLHandle,'__declspec');
  {$IFDEF WIN32}
    Assert(@__declspec <> nil);
  {$ENDIF}
  end
  else
  begin
    DLLLoaded := False;
    { Error: VNADLL.DLL could not be loaded !! }
  end;
{$IFNDEF MSDOS}
  SetErrorMode(ErrorMode)
{$ENDIF}
end {LoadDLL};

begin
  LoadDLL;
end.

Der Delphicompiler verarbeitet nur die ersten drei var-Deklarationen fehlerfrei.

Danke und viele Grüße,
Thomas
Gespeichert
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS