Unicode и Windows9x/Me
От: Павел Блудов Россия  
Дата: 18.04.02 09:03
Оценка: 175 (2)
Статья:
Unicode и Windows9x/Me
Автор(ы): Павел Блудов
Дата: 22.04.2002
В статье рассматриваются способы создания уникодных приложений, способных выполняться в Windows9x/Me


Авторы:
Павел Блудов

Аннотация:
В статье рассматриваются способы создания уникодных приложений, способных выполняться в Windows9x/Me
unicows.lib без Platform SDK
От: fuurin  
Дата: 21.09.02 13:22
Оценка:
Если кто ещё не обзавёлся свежим Platform SDK (как я), то UnicoWs.lib можно взять здесь:

http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/2601.0/WinBaseSDK-x86.2.0.cab
Garbage In Garbage Out
хорошая статья
От: Jer  
Дата: 19.04.02 09:03
Оценка:
мда... любой нормальный человек под NT будет писать на юникоде, по-крайней мере критические к скорости части... а потом можно получить "подарок" в виде поддержки 9х (умирал бы уже он в самом деле :) ).
Всё это сильно напоминает перехват API вызовов по Рихтеру, одно радует что в чужой процесс лезть не надо:)
.
.
.
кстати у вас действительно такие окошки цвета чернобыльской тыквы?))) глаза ж сломать можно....
и вот тут опечатка: "...Четвертый параметр – указатель не функцию..."
Re: хорошая статья
От: Блудов Павел Россия  
Дата: 21.04.02 18:29
Оценка:
>у вас действительно такие окошки цвета чернобыльской тыквы?)))
Это так "Графический редактор Paint" преобразовавает стандартный
серый цвет, которым W2k окошки рисует в 256-цветовый gif.

За очепятку спасибо.

Что касается переписывания IAT — если можно обойтись без этого
(есть исходники), лучше не извращаться. Вот если есть чужая либа
то только так или подобным образом.
Re[2]: хорошая статья
От: Northrop  
Дата: 20.02.04 13:41
Оценка:
Интересно, а как быть, если надо сделать заставить работать UpdateResource под Win9X? У меня при компиляции моего MFC-проекта выдает сообщение

Linking...
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
unicows.lib(thunk_user32_UnregisterClassW.obj) : fatal error LNK1103: debugging information corrupt; recompile module
Re: Unicode и Windows9x/Me
От: Аноним  
Дата: 15.06.04 14:31
Оценка: 9 (1)
В статье приведен неправильный способ переопределения указателя на функцию, эмулирующую юникодную функцию для неуникодной версии Windows. На самом деле надо переопределить переменную Unicows_xxxW (а не функцию), в которой хранится указатель на соответствующую реализацию:

static HANDLE AddPrinterOverride(LPTSTR *pName, DWORD Level, LPBYTE pPrinter)
{
    int iRes = ::MessageBox(NULL, L"Hello from AddPrinterOverride", NULL, MB_OK);
    return NULL;
}

extern "C" FARPROC Unicows_AddPrinterW = (FARPROC)&AddPrinterOverride;


Еще хочу заметить, что пример в MSDN c функцией LoadCursorW содержит ошибку — там написано просто "extern FARPROC", надо писать "extern "C" FARPROC".
Re: Unicode и Windows9x/Me
От: AlienB5 Россия  
Дата: 05.10.04 10:07
Оценка:
Здравствуйте, Павел Блудов, Вы писали:

ПБ>Статья:



ПБ>Авторы:

ПБ> Павел Блудов

ПБ>Аннотация:

ПБ>В статье рассматриваются способы создания уникодных приложений, способных выполняться в Windows9x/Me

В статье есть 2 маленькие ошибки, хотя в исходниках, что идут со статьей, их нет:
1.
Неправильно:
while(pNamesTable->u1.AddressOfData)
{
... // нет инкремента pNamesTable++
}

Правильно:
for(;pNamesTable->u1.AddressOfData; pNamesTable++)

2. ( Скорее всего это не ошибка, а — недописка )
В той части статьи, где рассказывается о "Проблеме отложенной загрузки",
необходимо сказать, что метод _UnicowsInit тоже изменился:
Было:
_UnicowsInit()
{
...
// Запонимаем таблицу имен и адресов
g_pdwOrd = MakePtr(LPWORD, g_hModuleUnicows, pExpDir->AddressOfNameOrdinals);
g_pdwNames = MakePtr(LPDWORD, g_hModuleUnicows, pExpDir->AddressOfNames);
g_pdwAddrs = MakePtr(LPDWORD, g_hModuleUnicows, pExpDir->AddressOfFunctions);
g_dwNames = pExpDir->NumberOfNames;

return TRUE;
}


Стало:
_UnicowsInit()
{
...
// Запонимаем таблицу имен и адресов
g_pdwOrd = MakePtr(LPWORD, g_hModuleUnicows, pExpDir->AddressOfNameOrdinals);
g_pdwNames = MakePtr(LPDWORD, g_hModuleUnicows, pExpDir->AddressOfNames);
g_pdwAddrs = MakePtr(LPDWORD, g_hModuleUnicows, pExpDir->AddressOfFunctions);
g_dwNames = pExpDir->NumberOfNames;
_RealGetProcAddress = GetProcAddress;

return TRUE;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.