powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / длл функции winapi
2 сообщений из 2, страница 1 из 1
длл функции winapi
    #38185612
Artem843
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Помогите пожалуйста сделать на winapi c++, у меня ошибка при создании новой директории, функию удаления создавал, то она работает, а эта вылетает. зарание спасибо!

#include <iostream>
#include <windows.h>
using namespace std;

typedef BOOL (WINAPI *hCreateDirectoryFunc)(LPSTR lpStr);

int main()
{
hCreateDirectoryFunc hCreateDirectory=NULL;
HMODULE hKernel32=NULL;
hKernel32=GetModuleHandle("kernel32.dll");
if (hKernel32==NULL)
{
MessageBox(NULL,"Error Load Kernel32","Error",MB_OK);
return FALSE;
}
hCreateDirectory=(hCreateDirectoryFunc)GetProcAddress(hKernel32,"CreateDirectoryA");
if (hCreateDirectory==NULL)
{
MessageBox(NULL,"Error Load hDelete","Error",MB_OK);
return FALSE;
}
if ((*hCreateDirectory)((LPSTR)"D:\\1"))
MessageBox(NULL,"Deleted","Message",MB_OK);
else
MessageBox(NULL,"Not Deleted","Message",MB_OK);

return 0;

}
...
Рейтинг: 0 / 0
длл функции winapi
    #38185666
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem843, динамическая загрузка и GetProcAddress() здесь не нужны. Переделай пример чтобы kernel32 линковалась статически и вызывай функцию напрямую. Если ты работаешь в VS, то ничего делать не нужно т.к. настройки по умолчанию это обеспечивают. В итоге твой код должен выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
int main()
{
    CreateDirectory(T("D:\\1");
    // Проверка на ошибки и вызов GetLastError() если необходимо
    ...
}



Еще одна ошибка в коде с динамической загрузкой это явное использование функции CreateDirectoryA вместо CreateDirectoryW. Современные версии Windows используют Unicode версии api функций. Явно вызывая *A версию, ты заставляешь ОС транслировать аргументы в Unicode и чтобы затем вызывать *W функцию. То есть программа делает лишнюю работу. Кроме того для перехода на Unicode версии тебе придется вручную править код. Заголовочные файлы Windows SDK уже решают эту задачу путем подстановки *A и *W версии вместо функции без суффикса. В общем лучше это возложить на .
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / длл функции winapi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]