Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 12:23
Dennoch solltest du es mal mit stdcall versuchen.
Vom Aufruf her sind die sich gleich. Nur das Aufräumen der Parameter ist anders.

Delphi-Quellcode:
type
  {$MINENUMSIZE 2}
  TYPE_FRONT_END = (
    TYPE_FE_UNKNOWN, // not set
    TYPE_FE_DVB_C, // DVB-C
    TYPE_FE_DVB_S, // DVB-S
    TYPE_FE_DVB_S2, // DVB-S2
    TYPE_FE_DVB_T, // DVB-T
    TYPE_FE_ATSC, // ATSC
    TYPE_FE_DSS, // DSS
    TYPE_FE_DVB_CT, // DVB-C and DVB-T
    TYPE_FE_DVB_S2_PREM); // TT-premium with Dual DVB-S2 and digital capture
  {$MINENUMSIZE 1}  // Standardwert

  TS_FilterNames = {packed} record
    szTunerFilterName: array[0..MAX_PATH-1] of AnsiChar; // oder [1..MAX_PATH];
    szTunerFilterName2: array[0..MAX_PATH-1] of AnsiChar;
    szCaptureFilterName: array[0..MAX_PATH-1] of AnsiChar;
    szAnlgTunerFilterName: array[0..MAX_PATH-1] of AnsiChar;
    szAnlgCaptureFilterName: array[0..MAX_PATH-1] of AnsiChar;
    szSTBCaptureFilterName: array[0..MAX_PATH-1] of AnsiChar;
    szProductName: array[0..MAX_PATH-1] of AnsiChar;
    FeType: TYPE_FRONT_END;
  end;

function bdaapiGetDevNameAndFEType(hOpen: THandle; var FilterNames: TS_FilterNames): HRESULT; stdcall;
Das PACKED hat auf die Char/AnsiChar-Arrays keine Wirkung, da diese sowieso nur aus einzelnen Bytes bestehen und dadurch praktisch nicht ausgerichtet werden.
(Sie werden an den Bytegrenzen ausgerichtet, was somit dem PACKED entspricht)

Aber auf FeType dürfte PACKED eine wirkung zeigen, jedenfalls bei der falschen Arraylänge, da 7 Byte mehr (1 je Array), was auf vielfache von 2 (Sizeof(TYPE_FRONT_END) ), also 8 aufgerundet wird und somit diesen Wert verschiebt.


Wie bist du eigentlich von HANDLE auf HWND gekommen?
Ist das denn wirklich ein Fenster-Handle?
$2B or not $2B
  Mit Zitat antworten Zitat