如何将以下的.h转换成delphi
#ifndef _COUNTER_LIB_H_
#define _COUNTER_LIB_H_#pragma comment(lib, "ctcjggd3.lib")#define VENDORID 0x10ee
#define DEVICEID 0x0310#include "windrvr/windrvr.h"
#include "windrvr/pci_regs.h"
#include "windrvr/bits.h"
#ifdef __cplusplus
extern "C" {
#endif
#define DLL __declspec(dllimport)enum { CTCJGGD3_DEFAULT_VENDOR_ID = 0x10EC };
enum { CTCJGGD3_DEFAULT_DEVICE_ID = 0x8139 };enum
{
    CTCJGGD3_MODE_BYTE   = 0,
    CTCJGGD3_MODE_WORD   = 1,
    CTCJGGD3_MODE_DWORD  = 2
};
typedef DWORD CTCJGGD3_MODE;enum
{
    CTCJGGD3_AD_BAR0 = AD_PCI_BAR0,
    CTCJGGD3_AD_BAR1 = AD_PCI_BAR1,
    CTCJGGD3_AD_BAR2 = AD_PCI_BAR2,
    CTCJGGD3_AD_BAR3 = AD_PCI_BAR3,
    CTCJGGD3_AD_BAR4 = AD_PCI_BAR4,
    CTCJGGD3_AD_BAR5 = AD_PCI_BAR5,
    CTCJGGD3_AD_EPROM = AD_PCI_BAR_EPROM,
};
typedef DWORD CTCJGGD3_ADDR;// Number of IO and memory ranges
enum { CTCJGGD3_ITEMS = AD_PCI_BARS };typedef struct CTCJGGD3_STRUCT *CTCJGGD3_HANDLE;CTCJGGD3_HANDLE cHandle;typedef struct
{
    DWORD dwCounter;   // number of interrupts received
    DWORD dwLost;      // number of interrupts not yet dealt with
    BOOL fStopped;     // was interrupt disabled during wait
} CTCJGGD3_INT_RESULT;typedef void (*CTCJGGD3_INT_HANDLER)(CTCJGGD3_HANDLE hCTCJGGD3, CTCJGGD3_INT_RESULT *intResult);// options for CTCJGGD3_Open
enum { CTCJGGD3_OPEN_USE_INT =   0x1 };typedef struct
{
WORD CNT1;
WORD CNT2;
WORD CNT3;
WORD IMPTimeTag;
BYTE Status;
BOOL TIMCome;
BOOL BUPCome;
BOOL IMPCome;
}DataInfo_STRUCT;DataInfo_STRUCT stDataInfo={0};
// internal data structures
typedef struct
{
    WD_INTERRUPT Int;
    HANDLE hThread;
    WD_TRANSFER Trans[1];
    CTCJGGD3_INT_HANDLER funcIntHandler;
} CTCJGGD3_INT_INTERRUPT;typedef struct
{
    DWORD index;
    DWORD dwMask;
    BOOL  fIsMemory;
    BOOL  fActive;
} CTCJGGD3_ADDR_DESC;typedef struct CTCJGGD3_STRUCT
{
    HANDLE hWD;
    BOOL   fUseInt;
    CTCJGGD3_INT_INTERRUPT Int;
    WD_PCI_SLOT pciSlot;
    CTCJGGD3_ADDR_DESC addrDesc[CTCJGGD3_ITEMS];
    WD_CARD_REGISTER cardReg;
} CTCJGGD3_STRUCT;DLL BOOL CTCJGGD3_Open(CTCJGGD3_HANDLE *phCTCJGGD3, DWORD dwVendorID, DWORD dwDeviceID);
DLL void CTCJGGD3_Close(CTCJGGD3_HANDLE hCTCJGGD3);
DLL BOOL ResetCard(CTCJGGD3_HANDLE hCTCJGGD3);DLL BOOL SetFDiv(CTCJGGD3_HANDLE hCTCJGGD3,BYTE Multiple);
DLL void SetTimerInterval(CTCJGGD3_HANDLE hCTCJGGD3,BYTE Time);
DLL BOOL StartTimer(CTCJGGD3_HANDLE hCTCJGGD3,BOOL Enable);
DLL void SetTriggerDepth(CTCJGGD3_HANDLE hCTCJGGD3,BYTE Depth);
DLL BOOL IsFIFOTriggered(CTCJGGD3_HANDLE hCTCJGGD3);
DLL BOOL IsFIFOEmpty(CTCJGGD3_HANDLE hCTCJGGD3);
DLL void ReadDatas(CTCJGGD3_HANDLE hCTCJGGD3,DataInfo_STRUCT *myDatas);#ifdef __cplusplus
}
#endif
#endif

解决方案 »

  1.   

    用工具转的:
    unit 123;
    {**************************************************************************}
    {                                                                          }
    {    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:  2004-3-29                                            }
    {    Generated Time: 22:12:39                                              }
    {                                                                          }
    {**************************************************************************}interface
    uses
    {$IFDEF WIN32}
      Windows;
    {$ELSE}
      Wintypes, WinProcs;
    {$ENDIF}{$IFNDEF _COUNTER_LIB_H_}
    {$DEFINE _COUNTER_LIB_H_}{ #pragma comment(lib, "ctcjggd3.lib") }const
      VENDORID = $10ee;
    const
      DEVICEID = $0310;{$INCLUDE "windrvr/windrvr.h"}
    {$INCLUDE "windrvr/pci_regs.h"}
    {$INCLUDE "windrvr/bits.h"}
    {$IFDEF __cplusplus}
    {$ENDIF}
    const
      DLL = __declspec(dllimport);type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = (
        CTCJGGD3_DEFAULT_VENDOR_ID {= 0x10EC } );
    type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = (
        CTCJGGD3_DEFAULT_DEVICE_ID {= 0x8139 } );type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = (
        CTCJGGD3_MODE_BYTE {= 0}, 
        CTCJGGD3_MODE_WORD {= 1}, 
        CTCJGGD3_MODE_DWORD {= 2 } );
    type
      CTCJGGD3_MODE = LongInt;type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = (
        CTCJGGD3_AD_BAR0 {= AD_PCI_BAR0}, 
        CTCJGGD3_AD_BAR1 {= AD_PCI_BAR1}, 
        CTCJGGD3_AD_BAR2 {= AD_PCI_BAR2}, 
        CTCJGGD3_AD_BAR3 {= AD_PCI_BAR3}, 
        CTCJGGD3_AD_BAR4 {= AD_PCI_BAR4}, 
        CTCJGGD3_AD_BAR5 {= AD_PCI_BAR5}, 
        CTCJGGD3_AD_EPROM {= AD_PCI_BAR_EPROM} );
    type
      CTCJGGD3_ADDR = LongInt;{/// Number of IO and memory ranges }
    type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = (
        CTCJGGD3_ITEMS {= AD_PCI_BARS } );type
      CTCJGGD3_STRUCT*CTCJGGD3_HANDLE; = record
        dwCounter: LongInt;
        dwLost: LongInt;
        fStopped: Bool;
      end {CTCJGGD3_STRUCT*CTCJGGD3_HANDLE;};type
      = VOID (*CTCJGGD3_INT_HANDLER)(CTCJGGD3_HANDLE HCTCJGGD3, CTCJGGD3_INT_RESULT*INTRESULT);{/// options for CTCJGGD3_Open }
    type
      DataInfo_STRUCT = (
        CTCJGGD3_OPEN_USE_INT {= 0x1 } );type
      DataInfo_STRUCT = record
        CNT1: Word;
        CNT2: Word;
        CNT3: Word;
        IMPTimeTag: Word;
        Status: BYTE;
        TIMCome: Bool;
        BUPCome: Bool;
        IMPCome: Bool;
      end {DataInfo_STRUCT};{/// internal data structures }
    type
      CTCJGGD3_INT_INTERRUPT = record
        Int: WD_INTERRUPT;
        hThread: THandle;
        Trans: Array[0..1-1] of WD_TRANSFER;
        funcIntHandler: CTCJGGD3_INT_HANDLER;
      end {CTCJGGD3_INT_INTERRUPT};type
      CTCJGGD3_ADDR_DESC = record
        index: LongInt;
        dwMask: LongInt;
        fIsMemory: Bool;
        fActive: Bool;
      end {CTCJGGD3_ADDR_DESC};type
      CTCJGGD3_STRUCT = record
        hWD: THandle;
        fUseInt: Bool;
        Int: CTCJGGD3_INT_INTERRUPT;
        pciSlot: WD_PCI_SLOT;
        CTCJGGD3_ADDR_DESC addrDesc: Array[0..CTCJGGD3_ITEMS-1] of Integer;
        cardReg: WD_CARD_REGISTER;
      end {CTCJGGD3_STRUCT};var
      CTCJGGD3_Open: function(phCTCJGGD3: PCTCJGGD3_HANDLE; 
                              dwVendorID: LongInt; 
                              dwDeviceID: LongInt): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      CTCJGGD3_Close: function(hCTCJGGD3: CTCJGGD3_HANDLE) cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      ResetCard: function(hCTCJGGD3: CTCJGGD3_HANDLE): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; var
      SetFDiv: function(hCTCJGGD3: CTCJGGD3_HANDLE; 
                        Multiple: BYTE): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      SetTimerInterval: function(hCTCJGGD3: CTCJGGD3_HANDLE; 
                                 Time: BYTE) cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      StartTimer: function(hCTCJGGD3: CTCJGGD3_HANDLE; 
                           Enable: Bool): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      SetTriggerDepth: function(hCTCJGGD3: CTCJGGD3_HANDLE; 
                                Depth: BYTE) cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      IsFIFOTriggered: function(hCTCJGGD3: CTCJGGD3_HANDLE): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      IsFIFOEmpty: function(hCTCJGGD3: CTCJGGD3_HANDLE): DLL cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
    var
      ReadDatas: function(hCTCJGGD3: CTCJGGD3_HANDLE; 
                          var myDatas: DATAINFO_STRUCT) cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; {$IFDEF __cplusplus}
    {$ENDIF}
    {$ENDIF}var
      DLLLoaded: Boolean { is DLL (dynamically) loaded already? }
        {$IFDEF WIN32} = False; {$ENDIF}implementationvar
      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('123.DLL');
      if DLLHandle >= 32 then
      begin
        DLLLoaded := True;
        SaveExit := ExitProc;
        ExitProc := @NewExit;
        @CTCJGGD3_Open := GetProcAddress(DLLHandle,'CTCJGGD3_Open');
      {$IFDEF WIN32}
        Assert(@CTCJGGD3_Open <> nil);
      {$ENDIF}
        @CTCJGGD3_Close := GetProcAddress(DLLHandle,'CTCJGGD3_Close');
      {$IFDEF WIN32}
        Assert(@CTCJGGD3_Close <> nil);
      {$ENDIF}
        @ResetCard := GetProcAddress(DLLHandle,'ResetCard');
      {$IFDEF WIN32}
        Assert(@ResetCard <> nil);
      {$ENDIF}
        @SetFDiv := GetProcAddress(DLLHandle,'SetFDiv');
      {$IFDEF WIN32}
        Assert(@SetFDiv <> nil);
      {$ENDIF}
        @SetTimerInterval := GetProcAddress(DLLHandle,'SetTimerInterval');
      {$IFDEF WIN32}
        Assert(@SetTimerInterval <> nil);
      {$ENDIF}
        @StartTimer := GetProcAddress(DLLHandle,'StartTimer');
      {$IFDEF WIN32}
        Assert(@StartTimer <> nil);
      {$ENDIF}
        @SetTriggerDepth := GetProcAddress(DLLHandle,'SetTriggerDepth');
      {$IFDEF WIN32}
        Assert(@SetTriggerDepth <> nil);
      {$ENDIF}
        @IsFIFOTriggered := GetProcAddress(DLLHandle,'IsFIFOTriggered');
      {$IFDEF WIN32}
        Assert(@IsFIFOTriggered <> nil);
      {$ENDIF}
        @IsFIFOEmpty := GetProcAddress(DLLHandle,'IsFIFOEmpty');
      {$IFDEF WIN32}
        Assert(@IsFIFOEmpty <> nil);
      {$ENDIF}
        @ReadDatas := GetProcAddress(DLLHandle,'ReadDatas');
      {$IFDEF WIN32}
        Assert(@ReadDatas <> nil);
      {$ENDIF}
      end
      else
      begin
        DLLLoaded := False;
        { Error: 123.DLL could not be loaded !! }
      end;
    {$IFNDEF MSDOS}
      SetErrorMode(ErrorMode)
    {$ENDIF}
    end {LoadDLL};begin
      LoadDLL;
    end.
      

  2.   

    能私下问问BeyondStudio,你用的是什么转换工具?详细点好吗?source有吗?呵呵!谢谢!