Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL и Консоль / 12 сообщений из 12, страница 1 из 1
05.09.2005, 12:58
    #33251490
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
Привет. Подскажите как мне из DLL поднять консоль ?. Понимаю, что идея дурацкая, но очень нужно :)
cout<< ' ';
не прокатывает.
...
Рейтинг: 0 / 0
05.09.2005, 12:59
    #33251497
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
AllocConsole ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.09.2005, 13:07
    #33251522
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
не прокатило.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#pragma once
#define p(i) parm->p[(i)].val

void COUT (ParamBlk FAR *parm) 
{ 
char *szStrOut = (char*)malloc(p( 0 ).ev_length);
_HLock(p( 0 ).ev_handle);
memmove(szStrOut,_HandToPtr(p( 0 ).ev_handle),p( 0 ).ev_length);
_HUnLock(p( 0 ).ev_handle);

AllocConsole();
cout << szStrOut;
cin >> szStrOut;
FreeConsole();
}

Консоль не поднимает, хотя в MSDN написано, что именно для того и существет , чтобы обеспечить страндартный ввод и вывод в консоль из процесса DLL.
...
Рейтинг: 0 / 0
05.09.2005, 13:09
    #33251526
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
ММММ. А может LastError что-то даст ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.09.2005, 13:13
    #33251547
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
GetLastError выдал 6.
6 The handle is invalid. ERROR_INVALID_HANDLE
Это как понимать ?
...
Рейтинг: 0 / 0
05.09.2005, 13:30
    #33251611
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
AllocConsole()
GetStdHandle(STD_OUTPUT_HANDLE)
WriteConsole()
...
Рейтинг: 0 / 0
05.09.2005, 14:13
    #33251795
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
Землекоп, озадачил ты меня :) Давай пример вывода ASCI строки в консоль из DLL.
...
Рейтинг: 0 / 0
05.09.2005, 19:17
    #33252620
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
ТупойЗемлекоп, озадачил ты меня :) Давай пример вывода ASCI строки в консоль из DLL.

Сразу оговорюсь, что это работающий пример, но не более того.

в DLL

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
// testdll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "testdll.h"


BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}



HANDLE hOut=NULL;
extern "C"
	{
__declspec(dllexport) void CreateConsole()
	{
	if(hOut==NULL)
		{
		AllocConsole();
		hOut = GetStdHandle(STD_OUTPUT_HANDLE);
		}
 
	}

__declspec(dllexport) void DestroyConsole()
	{
	if(hOut!=NULL)
		{
		FreeConsole();
		hOut = NULL;
		}

	}


__declspec(dllexport) void PrintOnConsole(char *pTxt)
		{
		DWORD NumberOfCharsWritten;
		WriteConsole(hOut, pTxt,lstrlen(pTxt),&NumberOfCharsWritten, NULL);
		}
	}


Пример вызова

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// testconsoledll.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

extern "C" __declspec(dllimport) void PrintOnConsole(char *pTxt);
extern "C" __declspec(dllexport) void CreateConsole();
extern "C" __declspec(dllexport) void DestroyConsole();

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
	{
	CreateConsole();
	PrintOnConsole("TEST");
	MessageBox(NULL,"Console test","Console test",MB_OK);
	DestroyConsole();
	return  0 ;
	}
...
Рейтинг: 0 / 0
05.09.2005, 23:16
    #33252797
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
Да! То что надо ! Клас!!!
А в юникоде? Где-то примерчик тут видел, преобразования в широкие символы. Что-то получившаяся консоль ни хочет отображать Руссишь ленгвичь. Абра-кадабра выходит :)
...
Рейтинг: 0 / 0
06.09.2005, 00:26
    #33252818
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
ТупойДа! То что надо ! Клас!!!
А в юникоде? Где-то примерчик тут видел, преобразования в широкие символы. Что-то получившаяся консоль ни хочет отображать Руссишь ленгвичь. Абра-кадабра выходит :)

Консоль вероятно использует OEM кодировку. Перед выводом можно использовать функцию CharToOem.
...
Рейтинг: 0 / 0
06.09.2005, 12:31
    #33253554
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
Ага, пасиб, прокатило. С выводом понятно, а как нить можно организовать чтение ?
...
Рейтинг: 0 / 0
06.09.2005, 13:54
    #33253889
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL и Консоль
ТупойАга, пасиб, прокатило. С выводом понятно, а как нить можно организовать чтение ?

Аналогично

hIn = GetStdHandle(STD_INPUT_HANDLE);
ReadConsoleInput(hIn, ....);
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL и Консоль / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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