> Shedever
Или ты не внимательно прочитал вопрос и ответ на него, или ты ничего не понял. Речь идет о выгрузке из arx-файла самого себя. acrxDynamicLinker->unloadModule() в этом случае не может помочь. Если не веришь на слово - проверь:
//----------------------------------------------------------------
// Функция по полному пути к arx/dbx-модулю возвращает имя модуля
// пригодное для acrxDynamicLinker->unloadModule или NULL
// если такой модуль не загружен
//----------------------------------------------------------------
static ACHAR *getThisLoadedName(ACHAR *path)
{
resbuf *rb = acedArxLoaded(), *rb_start = rb;
for (; rb ; rb = rb->rbnext) {
HMODULE hRb = GetModuleHandle(rb->resval.rstring);
ACHAR rbPath[_MAX_PATH+1]=""; GetModuleFileName(hRb,rbPath,_MAX_PATH);
if (!AcString(path).compareNoCase(rbPath)) {
ACHAR *str = strdup(rbPath);
acutRelRb(rb_start);
return str;
}
}
acutRelRb(rb_start);
return NULL;
}
// - Arx.SELFUNLOAD command (do not rename)
static void ArxSELFUNLOAD(void)
{
ACHAR thispath[_MAX_PATH+1]="";
GetModuleFileName(_hdllInstance,thispath,_MAX_PATH);
acutPrintf(_T("\nПопытка выгрузить %s"),thispath);
ACHAR *path = getThisLoadedName(thispath);
if (path) {
acutPrintf(_T("\nПредпринимается попытка выгрузить %s"), path);
acutPrintf(_T("\nРезультат %s!!!"), acrxDynamicLinker->unloadModule(path)?_T("положительный"):_T("отрицательный"));
free(path); path = getThisLoadedName(thispath);
// Если path != NULL - значит модуль не выгрузился!!!
if (path) {
acutPrintf(_T("\nНо модуль не выгрузился!!!"));
free(path);
}
}
}
P.S.: И на будущее. Если делаешь категоричные выводы:
более правильно использовать:
- подтверждай их примерами.