Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg er ikke helt sikker på det er hvad du har brug for, men jeg bruger denne stump kode til at validere om det er mit program der kalder dll'et
i DLL'ets DPR-fil:
...
procedure DllMain(aReason: integer); var buf: array[0..MAX_PATH] of char; begin case aReason of DLL_PROCESS_ATTACH : begin // Executable attaches to DLL GetModuleFileName(0, buf, SizeOf(buf)); if AnsiSameStr(ExtractFileName(string(buf)),'MyApp.exe') then ExitCode := -1; end; DLL_THREAD_ATTACH : begin // Thread in exe calls DLL end; DLL_THREAD_DETACH : begin // Thread leaves DLL end; DLL_PROCESS_DETACH : begin // Exe detaches from DLL end; end; end;
begin if not assigned(DllProc) then begin DllProc := @DllMain; DllProc(DLL_PROCESS_ATTACH); end; end.
Alternativt kan du vel forlange at få programmets handle med i kaldet til dine procedurer og validere der. Det har jeg vist også et eksempel på, men jeg skal i seng da ungerne vækker mig kl. 6 (øv, jeg skal forestille at have ferie)
Jeg er lidt utryg ved man griber fat i programmets Application-objekt, sådan som Ares eksempel gør. I DLL-sammenhænge synes jeg løsningen er for nem. Det plejer aldrig at være ligetil når man skal rode med de (s....) DLL-filer.
For en god ordens skyld - ja, det gør den (nedenstående sakset fra D2005's kildekode):
function TApplication.GetExeName: string; begin Result := ParamStr(0); end;
function ParamStr(Index: Integer): string; {$IFDEF MSWINDOWS} var P: PChar; Buffer: array[0..260] of Char; begin Result := ''; if Index = 0 then SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))) (...)
OK. Så er der jo ingen ko på isen. Jeg gad ikke lige dykke ned i VCL'et men det gjorde pidgeot. Mit eksempel er ud af en større sammenhæng og jeg gad ikke isolere GetModuleFileName. Desuden har jeg tit brug for konstruktionen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.