Какой самый простой способ вывода в консоль (создавть ее тоже надо из DLL) причем очень желательно чтобы была возможность вывода с помощбю printf(). Просто небольшой лог будет наиблолее удобней сделать именно консолью.
А мне кажется, что удобнее писать лог в файл. А так то - AllocConsole (для создания новой)/AttachConsole(для получения доступа к существующей консоли любого процесса, но требует минимум wxp) и не забываем что у процесса м.б. не более одной консоли
В принцепе я разобрался, но никто не подскажет как мне вызвать из DLL fprintf();? Просто прога компилируеться нормально все норм, но консоль мигает и пропадает код что-то вроде этого: Код (Text): #include <windows.h> #include<stdio.h> #pragma comment (lib, "user32.lib") #pragma comment (lib, "KERNEL32.LIB") #pragma comment (lib, "advapi32.LIB") #pragma comment(linker,"/SUBSYSTEM:WINDOWS") #pragma comment(linker,"/ENTRY:main") LPDWORD y; int main(HINSTANCE hDLL,DWORD Reason,LPVOID Reserved) { if(Reason==DLL_PROCESS_ATTACH) { // _asm { int 3 } AllocConsole(); HANDLE c= GetStdHandle(STD_OUTPUT_HANDLE); WriteFile(c,"WriteFile", 5, y ,NULL ); fprintf((FILE *)c,"fprintf"); Sleep(1000); } } Выводиться лишь WriteFile, и то программа сразу завершаеться Я предпологаю чтото с #pragma comment(linker,"/ENTRY:main") надо мутить )
n0name FILE * - это фактически хендел А во вторых почему консоль сразу закрываеться, ведь если вы и правы что дело в "хенделе" то почму просто ф/я не возвращает ошибку? Да и мне странно FILE * называть указателем, куда он по вашему указывает?
На структуру FILE в соответствующем пуле. Не корректное сравнение. FILE содержит хендл и кучку другой инфы о файле. По сути, тебе нужно разобраться в файловом IO сей и понять, чем отличаются FILE*, STD_*_HANDLE и HANDLE. Плюс ко всему, нужна инициализация file io части CRT, чтобы корректно работали функции. А инициализация проста на самом деле: Код (Text): AllocConsole(); freopen("CONOUT$", "wt", stdout); printf("Hello\n"); Либо смотреть тут.
IceStudent Спасбо и за ссыль и за пример, и за разьеснения, но почемуто не работает не вашь пример не тот который у МС, мб котнечно это я косячу, но если это возможно полностью рабочий пример.
SPA Разбирайся, у меня работает: Код (Text): proc DllEntryPoint hinstDLL,fdwReason,lpvReserved cmp [fdwReason],DLL_PROCESS_ATTACH jne @F invoke AllocConsole mov edx,[_iob] add edx,sizeof.FILE invoke freopen,szCon,szWt,edx invoke printf,szHello @@: mov eax,TRUE ret endp
n0name Ты меня конечно извини, но какое определение хендела дашь тем оно и будет являться, я дал такое: некоторое число которое однозначно соответцтвует некоторой структуре описывающей что либо, это может быть как указатель так и индекс в некотором массиве... Если я не прав, вероятнось чего я ни когда не отрицаю, то просто я не прав и это не о чем не говорит, и ничего не доказывает вот и все!
IceStudent Вот я вернулся к этому вопросу ) можно узнать а какие freopen и printf Вы юзаите? PS видимо я просто перемудрил ) PSS понял более-мение разницу между хенделом и "указателем" на файлик
IceStudent Прошку прошение, за "наглость" можно прям рабочий пример, или скомпилированный, просто я что-то не так понял и всяко разно не получаеться. PS наверное 2-х месячная сесия плохо отразилась