Hallo zusammen,
ich habe mir vor einiger Zeit eine Funktion gebastelt über die ich unter Windows 7 die Standard Pfade von Windows auslesen kann:
Delphi-Quellcode:
//Constants
const
FOLDERID_Desktop: KNOWNFOLDERID = '
{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}';
//CSIDL_DESKTOPDIRECTORY
FOLDERID_LocalAppData: KNOWNFOLDERID = '
{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}';
//CSIDL_LOCAL_APPDATA
FOLDERID_ProgramData: KNOWNFOLDERID = '
{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}';
//CSIDL_COMMON_APPDATA
FOLDERID_PuplicDesktop: KNOWNFOLDERID = '
{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}';
//CSIDL_COMMON_DESKTOPDIRECTORY
FOLDERID_Fonts: KNOWNFOLDERID = '
{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}';
//CSIDL_FONTS
//******************************************************************************
// fnGetKnownFolderPath --> Get Constant Special Item ID Path from Windows *
// *
// Only for WIN 7 *
// WIN XP has to use fnGetShellFolder in this Unit *
// *
// Parameter --> iCSIDL (Constant Special Item ID) *
// Return --> Boolean True/False *
//******************************************************************************
function fnGetKnownFolderPath(sKnownFolderID :
String) :
String;
var
sPath : LPWSTR;
begin
//Set Result
Result := EmptyStr;
{$IFDEF VER220}
If sKnownFolderID = '
FOLDERID_Desktop'
Then SHGetKnownFolderPath(FOLDERID_Desktop,0, 0, sPath);
If sKnownFolderID = '
FOLDERID_LocalAppData'
Then SHGetKnownFolderPath(FOLDERID_LocalAppData,0, 0, sPath);
If sKnownFolderID = '
FOLDERID_ProgramData'
Then SHGetKnownFolderPath(FOLDERID_ProgramData,0, 0, sPath);
If sKnownFolderID = '
FOLDERID_PuplicDesktop'
Then SHGetKnownFolderPath(FOLDERID_PuplicDesktop,0, 0, sPath);
If sKnownFolderID = '
FOLDERID_Fonts'
Then SHGetKnownFolderPath(FOLDERID_Fonts,0, 0, sPath);
{$ENDIF}
//Set Result
Result := sPath;
end;
Nun hab ich mit der Funktion das folgende Problem...
Wir haben ein Hauptprogramm was das UI darstellt...
Über das UI kann der User diverse Module aufrufen die in DLLs ausgelagert sind (die DLLs werden dynamisch gelinkt)...
Rufe ich die Funktion im Hauptprogramm auf, habe ich kein Problem...
Rufe ich die Funktion aber in einer
DLL auf bekomme ich einen Runtime Error 216...
Woran kann das liegen? Ist in der Funktion was falsch Programmiert?