Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2010, 23:16   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Delphi 2010, PAnsiChar и PWideChar

Есть у меня вот такая функция:
Код:
function DDLoadPalette(pdd:IDirectDraw7; szBitmap:PChar): DirectDrawPalette;
//не важно, что здесь означают может быть незнакомые вам типы...
Var
h : HRSRC; //Тот же LongInt;
fh : Integer;
begin
h := FindResource(0, szBitmap, RT_BITMAP);
//
....тут ещё код не важно какой....
//
fh := _lopen(szBitmap, OF_READ);
FindResource работает с PWideChar, FindResourceA работает с PAnsiChar, но! RT_BITMAP - это PWideChar в модуле windows.pas и её значение изменить я не могу никак, да наверное и не надо.
_lopen - работает только с PAnsiChar!!!! Функция из kernell32.dll
Внимание вопрос: как мне заставить работать эти две функции вместе?! Может есть конвертер из PWideChar в PAnsiChar или аналог функции _lopen, но аналог наверное не пойдет потому что в коде используются функции _lread и т.д.
P.S. Дельфи 7 всё работает прекрасно, так как нет этой замены PChar с PAnsiChar на PWideChar, и мне просто не верится, что они могли это сделать, не зная, то что так будет лучше!
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 05.09.2010 в 23:35.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 06.09.2010, 00:24   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

PChar это по-умолчанию подразумевается PWideChar. Т.е. Юникод по умолчанию.
Кастинг обычный пробовал? Type1(Type2)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.09.2010, 00:26   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

mutabor, немножко не понял насчет кастинга? Что понимается под этим словом в программировании?

mutabor, Я пробывал так:
Код:
fh := _lopen(PAnsiChar(szBitmap), OF_READ);
ехе компилируется, но вылетает ошибка в модуле DXCommon вот тут:
result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
(Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE')
"RunTime Error"
P.S. Это я пытаюсь с дельфиX на десятой дельфе работать... осталось только с Чарами исправить ошибки и будет рабочая версия дельфиИкс под десятку
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось Stilet; 06.09.2010 в 08:45.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 06.09.2010, 08:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что понимается под этим словом в программировании?
Преобразование типов.
Попробуй использовать конкретно FindResourceА (если она есть). А еще лучше использовать делфийские классы работы с ресурсами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 11:38   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Stilet, пробывал использовать FindResourceА, поменяв тип переменной szBitmap на PAnsiChar, тогда проблема с константой RT_BITMAP, которая указывает на тип используемого ресурса, она в windows.pas описана как PWideChar... Я понимаю, что можно на семерке работать и дальше, но это уже дело принципа. Ещё можно что-нибудь сделать?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 06.09.2010, 16:32   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
ехе компилируется, но вылетает ошибка в модуле DXCommon вот тут:
Хм... Компилятор ты обошел, а почему же ошибка?... Не все ли равно какого типа указатель, ведь указываем в нужное место. Наверное стоит сперва на кошках потренироваться, в смысле отладить приведение этих типов на тестовом примере каком нибудь.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 06.09.2010 в 16:43.
mutabor вне форума Ответить с цитированием
Старый 06.09.2010, 17:04   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ImmortalAlexSan, прикрепи ка сюда проектик, а?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 22:03   #8
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Сейчас, ребят, все скину вам, чем пользуюсь... Запустите Embarcadero RAD Studio Delphi 2010 откройте проект из папки Chapter02->Ex07... Ну так же можете попробовать с другими проектами, они такую же ошибку выдают после компиляции. только в проектах удалите путь на несуществующую библиотеку, автор сам его расставлял, у него битые были, я другие скачал. Дельфи 7 всё кушает замечательно и запускает, за исключением последнего примера последней главы, но об этом позже...
Вложения
Тип файла: zip DelphiX.zip (2.02 Мб, 10 просмотров)
Тип файла: zip Chapter02.zip (1.69 Мб, 13 просмотров)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 07.09.2010, 09:34   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ImmortalAlexSan
Рассказываю:
1) в DirectDraw заремил if not IsNTandDelphiRunning then - она давала сбой.
2) в DDUtil
Код:
function DDLoadPalette(pdd : IDirectDraw7; szBitmap : PAnsiChar) : IDirectDrawPalette;
3) В ее теле
Код:
h := FindResource(0,pwidechar(szBitmap), RT_BITMAP);
Запустил. Появилось что-то типа скринсейвера с картинкой природы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 21:51   #10
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Stilet, огромнейшее человеческое спасибо! Теперь я смогу и на дельфи 10 изучать DirectX! А можете рассказать как вы замерили if not IsNTandDelphiRunning then, как определили?..
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 2010 Hausedark Софт 9 14.07.2010 22:12
из String в Pansichar пауэрлифтинг Общие вопросы Delphi 10 05.02.2010 02:40
Integer в PWideChar motaro Общие вопросы Delphi 1 28.08.2009 18:35
pwidechar Toxa Общие вопросы Delphi 1 23.06.2008 13:57
pansichar to string Toxa Общие вопросы Delphi 16 31.05.2007 13:40