>   rMonitor=packed record
...
  end;

  rMonitorEx=packed record
    dwMonitorSize:DWORD;
    Monitor:rMonitor;
  end;

Are you sure the C record is packed too ? This would mean that all function pointers in rMonitor are not aligned.

I'm not shure about that as I'm not that good at C. The packed record works at 32bit -so I thought that should be correct.

Is there a difference between 64Bit and 32Bit?

Here is the orginal C definition, could someone take a look at this:

typedef struct _MONITOR {
  BOOL (WINAPI *pfnEnumPorts)
       (LPWSTR pName, DWORD Level, LPBYTE  pPorts, DWORD cbBuf,
        LPDWORD pcbNeeded, LPDWORD pcReturned);
  BOOL (WINAPI *pfnOpenPort)
       (LPWSTR pName, PHANDLE pHandle);
  BOOL (WINAPI *pfnOpenPortEx)
       (LPWSTR  pPortName, LPWSTR pPrinterName, PHANDLE pHandle,
        struct _MONITOR FAR *pMonitor);
  BOOL (WINAPI *pfnStartDocPort)
       (HANDLE hPort, LPWSTR pPrinterName, DWORD JobId,
        DWORD Level, LPBYTE  pDocInfo);
  BOOL (WINAPI *pfnWritePort)
       (HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
        LPDWORD pcbWritten);
  BOOL (WINAPI *pfnReadPort)
       (HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
        LPDWORD pcbRead);
  BOOL (WINAPI *pfnEndDocPort)
       (HANDLE hPort);
  BOOL (WINAPI *pfnClosePort)
       (HANDLE hPort);
  BOOL (WINAPI *pfnAddPort)
       (LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
  BOOL (WINAPI *pfnAddPortEx)
       (LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
        LPWSTR lpMonitorName);
  BOOL (WINAPI *pfnConfigurePort)
       (LPWSTR pName, HWND hWnd, LPWSTR pPortName);
  BOOL (WINAPI *pfnDeletePort)
       (LPWSTR pName, HWND hWnd, LPWSTR pPortName);
  BOOL (WINAPI *pfnGetPrinterDataFromPort)
       (HANDLE hPort, DWORD ControlID, LPWSTR pValueName,
        LPWSTR lpInBuffer, DWORD cbInBuffer, LPWSTR lpOutBuffer,
        DWORD cbOutBuffer, LPDWORD lpcbReturned);
  BOOL (WINAPI *pfnSetPortTimeOuts)
       (HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
        DWORD reserved    // must be set to 0);
  BOOL (WINAPI *pfnXcvOpenPort)
       (LPCWSTR pszObject, ACCESS_MASK GrantedAccess, PHANDLE phXcv);
  DWORD (WINAPI *pfnXcvDataPort)
        (HANDLE  hXcv, LPCWSTR pszDataName, PBYTE pInputData,
         DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
         PDWORD pcbOutputNeeded);
  BOOL (WINAPI *pfnXcvClosePort)
       (HANDLE  hXcv);
} MONITOR, FAR *LPMONITOR;

typedef struct _MONITOREX {
  DWORD  dwMonitorSize;
  MONITOR  Monitor;
} MONITOREX, FAR *LPMONITOREX;

regards
Lukas

--

--------------------------
software security networks
Lukas Gradl <fpc#ssn.at>
Eduard-Bodem-Gasse 5
A - 6020 Innsbruck
Tel: +43-512-214040-0
Fax: +43-512-214040-21
--------------------------
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to