Сейчас на форуме: tyns777, _MBK_, UniSoft (+11 невидимых)

 eXeL@B —› Программирование —› gui на ассемблере
Посл.ответ Сообщение

Ранг: 7.8 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 03 августа 2012 19:57
· Личное сообщение · #1

Здраствуйте! У меня пробема: решил накодить на масме диалоговое окно (програмку, использующую функцию beep). Делал по статье MASM32: Часть 3 — Брутальная бессердечность, код взял и переделал под себя оттуда. Он не компилируется:
Code:
  1. f:\beep\beep.asm(31) : error A2006: undefined symbol : IDD_DLG1
  2. f:\beep\beep.asm(31) : error A2114: INVOKE argument type mismatch : argument : 2
  3. f:\beep\beep.asm(47) : error A2006: undefined symbol : IDC_BTN1


Подскажите, что я забыл. Заранее спасибо
Сорцы в аттаче

3e7a_03.08.2012_EXELAB.rU.tgz - beep.zip




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 03 августа 2012 20:29
· Личное сообщение · #2

как вариант, скопируй константы из rc файла в основной модуль
а вообще, покажи, как ты его билдишь
сначала надо компилить ресурсы через rc, потом слинковать их с кодом



Ранг: 19.4 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 04 августа 2012 06:44
· Личное сообщение · #3

Вот это вставь перед секцией .data:
Code:
  1. WndProc   PROTO :DWORD,:DWORD,:DWORD,:DWORD ;ml без этого отказался ассемблить,
  2. ;а jwasm'у не понадобилось)
  3.  
  4. ;-------------------------------------------------------
  5. .const
  6. IDD_DLG1          equ 1000
  7. IDC_EDT1                  equ 1001
  8. IDC_STC2                  equ 1003
  9. IDC_EDT2                  equ 1004
  10. IDC_BTN1                  equ 1005




Ранг: 7.8 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 04 августа 2012 11:45 · Поправил: pompas
· Личное сообщение · #4

-=AkaBOSS=-
elch
Спасибо, скомпилировал, теперь пытаюсь запустить. Сначала выдавало
Code:
  1. Ошибка создания контекста архивации для "F:\beep\beep.exe". 
  2. Ошибка в файле манифеста или политики "F:\beep\beep.exe"
  3.  в строке 8. Значение "1.0.0.0." атрибута "version" 
  4. в элементе "assemblyIdentity" недопустимо.


Вырезал манифест, теперь не передается управление на WndProc. Ошибку возвращает функция
user32.DialogBoxIndirectParamAorW, которая внутри DialogBoxParam. В чём может быть ошибка?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 августа 2012 12:54 · Поправил: -=AkaBOSS=-
· Личное сообщение · #5

pompas пишет:
Значение "1.0.0.0." атрибута "version" в элементе "assemblyIdentity" недопустимо.

а кстати, с чего там вдруг такое значение?
может, последнюю точку из "1.0.0.0." убрать надо?

попробуй скомпилить с этим манифестом:
Code:
  1. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  2. <dependency> 
  3. <dependentAssembly> 
  4. <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> 
  5. </dependentAssembly> 
  6. </dependency> 
  7. </assembly>




Ранг: 7.8 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 04 августа 2012 13:13
· Личное сообщение · #6

-=AkaBOSS=-
Спасибо, опечатался, а с этим?
pompas пишет:

Вырезал манифест нах, теперь не передается управление на WndProc. Ошибку возвращает функция
user32.DialogBoxIndirectParamAorW, которая внутри DialogBoxParam. В чём может быть ошибка?





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 августа 2012 13:17
· Личное сообщение · #7

а с этим, выложи скомпиленый без манифеста файл, скажу больше
ибо я хз, что там за ошибка



Ранг: 7.8 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 05 августа 2012 11:31
· Личное сообщение · #8

После вызова DialogBoxParam ошибка ERROR_CANNOT_FIND_WND_CLASS (0000057F). Что это может быть?
Екзе прилагаю.

6268_05.08.2012_EXELAB.rU.tgz - beep.zip




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 05 августа 2012 11:50 · Поправил: -=AkaBOSS=-
· Личное сообщение · #9

попробуй убрать это из beep.rc
Code:
  1. CLASS "DLGCLASS"

и скомпиль заново
я вообще хз зачем оно там

/ADD:
Ну или таки зарегистрируй этот класс, если так хочется
И еще. У системных диалогов, как и у мессаджбокса, afaik, имя класса "#32770"



Ранг: 7.8 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 05 августа 2012 13:54
· Личное сообщение · #10

-=AkaBOSS=-
Получилось! Большое спасибо!


 eXeL@B —› Программирование —› gui на ассемблере
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати