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?