Kibor |
Отправлено: 18 Августа, 2020 - 20:46:35
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Добавлена функция freelibrary.
Ее назначение выгрузка подключенной ранее DLL с помощью external
Внимание! Выгрузка определенного DLL приведет к недоступности всех функций загруженных с DLL с этим именем, пока она опять не будут подключены с помощью external
Синтаксис:
CODE:int hModule=external(INT, "ShellExecute", "ShellExecuteA", "Shell32.dll");//Загрузили
freelibrary(hModule);//Выгрузили.
Пример недоступности выгруженной DLL
CODE:int hModule=external(INT, "ShellExecute", "ShellExecuteA", "Shell32.dll");
ShellExecute(0, "Open", "http:/^/kibor-bot.com/education-kibor.php", 0, "", 61728);
freelibrary(hModule);//Выгрузили.
messagebox("Тут функция ShellExecute не доступна будет, как и все функции с этой DLL подключенные ранее.");
ShellExecute(0, "Open", "http:/^/kibor-bot.com/education-kibor.php", 0, "", 61728);
Тут пример выгрузки и повторной загрузки. Ошибок нет.
CODE:int hModule=external(INT, "ShellExecute", "ShellExecuteA", "Shell32.dll");
ShellExecute(0, "Open", "http:/^/kibor-bot.com/education-kibor.php", 0, "", 61728);
freelibrary(hModule);//Выгрузили.
messagebox("Опять загрузим.");
hModule=external(INT, "ShellExecute", "ShellExecuteA", "Shell32.dll");
ShellExecute(0, "Open", "http:/^/kibor-bot.com/education-kibor.php", 0, "", 61728);
freelibrary(hModule);//Выгрузили. |
|
|
Zireael |
Отправлено: 30 Сентября, 2020 - 11:36:59
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как средствами WinAPI удалить папку с файлами?
CODE:#define FO_DELETE 3
#define FOF_NOCONFIRMATION 0x10
#define FOF_NOERRORUI 0x0400
#define FOF_SILENT 0x0004
external(INT, "SHFileOperation", "SHFileOperationA", "Shell32.dll");
// всё что выше в начало скрипта
DeleteFolder("C:\123"); //удалить папку
function DeleteFolder(string path)
{
char temp_dir[999];
int SHFILEOPSTRUCT[8];
initialarray(#temp_dir[0], 0);
initialarray(#SHFILEOPSTRUCT[0], 0);
strcpy(#temp_dir[0], path);
SHFILEOPSTRUCT[1] = FO_DELETE;
SHFILEOPSTRUCT[2] = address(#temp_dir[0]);
SHFILEOPSTRUCT[4] = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;
SHFileOperation(address(#SHFILEOPSTRUCT[0]));
} |
|
|
Zireael |
Отправлено: 30 Сентября, 2020 - 12:50:08
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: external(INT, "SHFileOperation", "SHFileOperationA", "Shell32.dll" )
В конце добавить ;
CODE:external(INT, "SHFileOperation", "SHFileOperationA", "Shell32.dll"); |
|
|
Kibor |
Отправлено: 02 Апреля, 2021 - 11:47:00
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
CODE:external(INT, "sscanf", "sscanf", "msvcrt.dll");
int p1, p2;
string input_s = "Возраст: 30 лет, рост:178 см";
sscanf(input_s,"Возраст: %d лет, рост:%d см", #p1, #p2);
messagebox (p1);
messagebox (p2);
Вызывается функция Кибор.
Использовать в external совпадающие имена нет никакого смысла.
Так надо.
CODE:external(INT, "sscanf_1", "sscanf", "msvcrt.dll");
int p1, p2;
string input_s = "Возраст: 30 лет, рост:178 см";
sscanf(input_s,"Возраст: %d лет, рост:%d см", #p1, #p2);
messagebox (p1);
messagebox (p2); |
|
|
|