0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
1

Иероглифы вместо текста

20.03.2018, 20:51. Показов 4812. Ответов 13
Метки нет (Все метки)

Пытаюсь получить текст из lpName, получаю в ответ иероглифы шумерских цивилизайций! Сил больше нет, что только не пробовал!!!

Delphi
1
2
3
4
5
6
7
8
9
10
var
  OrgCreateMutexA: function(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PWideChar): THandle; stdcall;
function NewCreateMutexA(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PWideChar): THandle; stdcall;
var
  lpNameStr : string;
begin
  lpNameStr := lpName;
  MessageBox(0, 'lpNameStr', Pchar(lpNameStr), MB_OK);
  //nMutex := OrgCreateMutexA(nil, False, '6f3fb9ba52156ce18');
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2018, 20:51
Ответы с готовыми решениями:

При создании справки (hpj) иероглифы вместо текста
Создаю справку для Delphi,вместо текста иероглифы

Вместо русских букв иероглифы
Сделал консольное приложение, а вместо русских букв - иероглифы, как это исправить?

Иероглифы вместо русских букв в ActionMenu Delphi 7
Столкнулась с неприятной проблемой - на новом компьютере в Д7 в одном месте некорректно...

иероглифы вместо русских букв
Я создада отчет в rave (delphi7),сохранила его в формате rtf. все бы ничего,но возникли проблемы с...

13
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
20.03.2018, 22:12 2
Лучший ответ Сообщение было отмечено EvaPiks как решение

Решение

попробуйте сообщить версию delphi
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
20.03.2018, 22:13  [ТС] 3
xe7
0
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
20.03.2018, 23:29 4
Лучший ответ Сообщение было отмечено EvaPiks как решение

Решение

не верю (С)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function NewCreateMutexA(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PWideChar): THandle; stdcall;
var
  lpNameStr : string;
begin
  lpNameStr := lpName;
  MessageBox(0, 'lpNameStr', Pchar(lpNameStr), MB_OK);
  //nMutex := OrgCreateMutexA(nil, False, '6f3fb9ba52156ce18');
end;
 
procedure TMainForm.bStartClick(Sender: TObject);
begin
  NewCreateMutexA(nil, false, 'РУССКИЙ ТЕКСТ');
end;
Изображения
 
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 07:16  [ТС] 5
Pascal
1
2
3
4
5
6
7
var
  OrgCreateMutexA: function(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PWideChar): THandle; stdcall;
function NewCreateMutexA(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PWideChar): THandle; stdcall;
begin
  MessageBox(0, 'lpNameStr', Pchar(lpName), MB_OK);
  //nMutex := OrgCreateMutexA(nil, False, '6f3fb9ba52156ce18');
end;
Что за мистика? Я сам подвох какой то вижу, но как его отловить?

https://www.cyberforum.ru/atta... 1521605782
Миниатюры
Иероглифы вместо текста  
0
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
21.03.2018, 08:20 6
Лучший ответ Сообщение было отмечено EvaPiks как решение

Решение

покажите как вызываете
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 08:27  [ТС] 7
Delphi
1
HookProc('kernel32.dll', 'CreateMutexA', @NewCreateMutexA, @OrgCreateMutexA);
Добавлено через 4 минуты
может в настройках проекта что тоинужно поменять? точнг помню сто полгода назад делал чтотоо подобное, возникала точнг таккя же проблема, и я ее точно решал, так как проект и по сей день работает... но совершенно не помню как.
0
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
21.03.2018, 08:32 8
мне не нравится что у вас наименования xxxA - CreateMutexA
а параметры у них как у W
CreateMutexW ... lpName: PWideChar
возможно у вас какая то фигня там еще есть.
в результате система думает, что вы ей даете Ansi - функции, а у вас-то - юникод

в норме все функции должны обходиться без A и W и использовать просто PChar
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 08:37  [ТС] 9
Pascal
1
2
3
4
5
6
7
var
  OrgCreateMutexA: function(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PAnsiChar): THandle; stdcall;
function NewCreateMutexA(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PAnsiChar): THandle; stdcall;
begin
  MessageBox(0, 'lpNameStr', Pchar(lpName), MB_OK);
  //nMutex := OrgCreateMutexA(nil, False, '6f3fb9ba52156ce18');
end;
Безрезультатно! Какие еще есть идеи?

https://www.cyberforum.ru/atta... 1521610586
Миниатюры
Иероглифы вместо текста  
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 08:42  [ТС] 10
По сути даже такой код не отрабатывает!!!
PureBasic
1
2
3
4
5
6
7
8
var
  OrgCreateMutexA: function(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PAnsiChar): THandle; stdcall;
function NewCreateMutexA(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PAnsiChar): THandle; stdcall;
begin
  lpName := '/mtx/sdaifusdk/45678';
  MessageBox(0, 'lpNameStr', Pchar(lpName), MB_OK);
  //nMutex := OrgCreateMutexA(nil, False, '6f3fb9ba52156ce18');
end;
Похоже на какое то безумие уже.

https://www.cyberforum.ru/atta... 1521610895
Миниатюры
Иероглифы вместо текста  
0
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
21.03.2018, 08:45 11
еще раз. глядим на то что хучим
'CreateMutexA',
а теперь на то что выводим
MessageBox(0, 'lpNameStr', Pchar(lpName), MB_OK);
в делфи 2010+ PChar = PWideChar
а строка туда придет PAnsiChar
а выводите вы ее как юникод. получаете правильную картинку
зачем вообще хучить Ansi функцию если ваша программа не-Ansi ?
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 08:50  [ТС] 12
То есть что мне туда поставить? PAnsiChar?

>>зачем вообще хучить Ansi функцию если ваша программа не-Ansi ?
Моя программа хукает функцию стороннего процесса.

Добавлено через 1 минуту
Когда ставлю PAnsiChar - [dcc32 Error] warcraft.dpr(173): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'
0
5494 / 4289 / 1379
Регистрация: 14.04.2014
Сообщений: 19,273
Записей в блоге: 19
21.03.2018, 09:12 13
вам пришла строка в Ansi
вы ее пихаете в функцию, которая хочет строку в юникод
pchar(MyAnsiString) не перекодирует строку, а просто говорит функции - несы, это юникод и есть
функция конечно соглашается и выводит вашу Ansi строку как юникод
вам не кажется, что обманывать функции нехорошо?
Delphi
1
2
3
4
5
6
var s1:ansistring;
s2:string;
 
s1:=pchar(lpName);
s2:=s1;
showMessage(s2);
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 81
21.03.2018, 09:21  [ТС] 14
Ошибку понял, спасибо огромное!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2018, 09:21
Помогаю со студенческими работами здесь

Вместо текста отображается (????????????????)
Почему нормально не отображается текст на русском языке в заголовке формы, на других компонентах, ...

ListView: вставить картинку вместо текста
можно ли чтобы в строках listview в какой-нибудь колонке вместо текста показывался рисунок и при...

Нужен элемент типа грида, но с селект боксами в хидере вместо текста
Подскажите где такое есть, плз.

Сделать так, чтобы после ввода текста в Edit вместо нажатия кнопки "Да" можно было нажимать клавишу "Enter"
Раньше при помощи нехитрого кода (if (key = #13) then ...) у меня получалось сделать так, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru