Jeśli zasoby trzymasz w oddzielnym pliku DLL, to przed kompilacją aplikacji odpalasz inna aplikację, która wylicza sumą kontrolną i generuje np. plik nagłówkowy z definicją stałej. Programik musisz napisać sobie oczywiście sam

Cały proces możesz zautomatyzować dodając odpowiednią komendę wywołania aplikacji zewnętrznej w opcji
"prebuild events" (tak to się nazywa w VC) głównego projektu. Dzięki temu, gdy będziesz kompilował projekt, wpierw zostanie wywołana aplikacja wyliczająca sumę.
W jakim zdarzeniu umieścić funkcję IsDebuggerPresent() podczas tworzenia formy FormCreate ?
Ja dałbym w jakimś timerze, ponieważ debugger można podpiąć w trakcie działania aplikacji, zatem sprawdzenie przy uruchomieniu aplikacji może nic nie dać. Dobrze też dać wywołanie w przypadkowych miejscach, tak żeby zablokowanie jednego wywołania nie załatwiło sprawy. W sumie też dobrze by było kod sprawdzający inline'ować, bo dość łatwo będzie znaleźć wszystkie wywołania
IsDebuggerPresent:
#ifdef NDEBUG
# define CHECK_DEBUGGER(code) \
char IsDbgPresent = 0; \
_asm { \
_asm mov eax, fs:[30h] \
_asm mov al, [eax + 2h] \
_asm mov IsDbgPresent, al \
} \
if(IsDbgPresent) code;
#else
# define CHECK_DEBUGGER(code)
#endif
void foo()
{
CHECK_DEBUGGER(return); // wyskok z funkcji lub...
CHECK_DEBUGGER(ExitProcess(0)); // zamknięcie aplikacji
...
}
To tylko trochę utrudni złamanie blokady, bo zawsze można przeszukać kod w poszukiwaniu sekwencji op-kodów. No ale lepsze to niż nic
