Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
1

Непонимание с GetOpenFileName

15.09.2010, 20:12. Просмотров 1974. Ответов 9
Метки нет (Все метки)

Вобщем,так как мою тему для вопросов удалили,буду постить,как все.
Вот код
Assembler
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
.386
.model flat,stdcall
option casemap: none
 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\include\comdlg32.inc
includelib \masm32\lib\comdlg32.lib
DialogProc proto :DWORD,:DWORD,:DWORD,:DWORD
EditProc proto :DWORD,:DWORD,:DWORD,:DWORD
.data
appName db "Simple TED",0
kdmText db "KeyDown",0
merrText db "Ошибка!",0
.data?
tBuff DWORD ?
hInst DWORD ?
OldWndProc DWORD ?
memHandle DWORD ?
fname DWORD ?
.code
prog:
 invoke GetModuleHandle,NULL
 mov hInst,eax
 invoke DialogBoxParam,hInst,1001,NULL,addr DialogProc,0
 invoke ExitProcess,0
 
 DialogProc proc hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  LOCAL ofs:OPENFILENAME
  .if uMsg==WM_INITDIALOG
   invoke ShowWindow,hDlg,1
   invoke GetDlgItem,hDlg,1000
   invoke SetWindowLong,eax,GWL_WNDPROC,offset EditProc
   mov OldWndProc,eax
  .elseif uMsg==WM_COMMAND
   .if wParam==3
    mov ofs.lStructSize,sizeof ofs
    mov ofs.hwndOwner,hDlg
    mov ofs.nMaxFile,260
    mov ofs.lpstrFile,offset fname
    mov ofs.lpstrFileTitle,NULL
    mov ofs.nMaxFileTitle,0
    mov ofs.lpstrInitialDir,NULL
    mov ofs.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
    invoke GetOpenFileName,addr ofs
    .if eax>0
     invoke MessageBox,0,offset fname,offset appName,0
    .else
     invoke MessageBox,0,offset merrText,offset appName,0
    .endif
   .endif
  .elseif uMsg==WM_CLOSE
   invoke EndDialog,hDlg,0   
  .endif
  xor eax,eax
  ret
 DialogProc endp
 EditProc proc hEdit:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  .if uMsg==WM_KEYDOWN
   
  .else
   invoke CallWindowProc,OldWndProc,hEdit,uMsg,wParam,lParam
   ret
  .endif
  xor eax,eax
  ret
 EditProc endp
end prog
в строке mov ofs.hwndOwner,hDlg постоянно вылетает ошибка,мол плохие операнды к инструкции.

Долгими размышлениями и горой мата я понял,что дело в типах. вопрос в следующем. Как мне hDlg скопировать в hwndOwner?

Примечание: в асм новичок
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2010, 20:12
Ответы с готовыми решениями:

Функция GetOpenFileName под Windows 7
Вызываю функцию таким образом push pop invoke ...

Непонимание
Привет всем ) Хочу начать изучение Java , с преподавателем(он знает java поверхностно) обговорили...

Непонимание пугает
Добрый вечер. Хотел бы поделиться с вами своей боязнью. Я только начал изучение Java. Самое...

Непонимание с кодом
Доброе время суток!Начал изучать си по книги Девида Гриффитса "Изучаем программирование на С" и...

Непонимание(интерфейсы)
Не могу найти информацию по тому как это называется, что-то вроде создания анонимного класса,...

9
Goodwin98
2523 / 819 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
15.09.2010, 20:17 2
Не правильно поняли. Ответ прост. Нельзя пересылать из памяти в память командой mov.
0
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
26.09.2010, 16:47  [ТС] 3
Ошибку свою понял и исправил. Через стек записываю,ошибки не выдаёт.
Появилась другая проблема.Теперь диалог открытия при нажатии на кнопку появляется,но не проходит и секунды,как он исчезает и винда говорит,что мол ошибка в проге.
Вот код:
Assembler
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
.386
.model flat,stdcall
option casemap: none
 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\include\comdlg32.inc
includelib \masm32\lib\comdlg32.lib
DialogProc proto :DWORD,:DWORD,:DWORD,:DWORD
EditProc proto :DWORD,:DWORD,:DWORD,:DWORD
.data
appName db "Simple TED",0
kdmText db "KeyDown",0
merrText db "Ошибка!",0
.data?
tBuff DWORD ?
hInst DWORD ?
OldWndProc DWORD ?
memHandle DWORD ?
fname DWORD ?
.code
prog:
 invoke GetModuleHandle,NULL
 mov hInst,eax
 invoke DialogBoxParam,hInst,1001,NULL,addr DialogProc,0
 invoke ExitProcess,0
 
 DialogProc proc hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  LOCAL ofs:OPENFILENAME
  .if uMsg==WM_INITDIALOG
   invoke ShowWindow,hDlg,1
   invoke GetDlgItem,hDlg,1000
   invoke SetWindowLong,eax,GWL_WNDPROC,offset EditProc
   mov OldWndProc,eax
  .elseif uMsg==WM_COMMAND
   .if wParam==3
    mov ofs.lStructSize,sizeof ofs
    push hDlg
    pop ofs.hwndOwner
    mov ofs.nMaxFile,256
    mov ofs.lpstrFile,offset fname
    mov ofs.lpstrFileTitle,NULL
    mov ofs.nMaxFileTitle,NULL
    mov ofs.lpstrInitialDir,NULL
    mov ofs.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
    invoke GetOpenFileName,addr ofs
    .if eax>0
     invoke MessageBox,0,offset fname,offset appName,0
    .else
     invoke MessageBox,0,offset merrText,offset appName,0
    .endif
   .endif
  .elseif uMsg==WM_CLOSE
   invoke EndDialog,hDlg,0   
  .endif
  xor eax,eax
  ret
 DialogProc endp
 EditProc proc hEdit:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  .if uMsg==WM_KEYDOWN
   
  .else
   invoke CallWindowProc,OldWndProc,hEdit,uMsg,wParam,lParam
   ret
  .endif
  xor eax,eax
  ret
 EditProc endp
end prog
подскажите,плиз,где снова накосячил
0
Goodwin98
2523 / 819 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
26.09.2010, 17:18 4
Сделайте переменную ofs глобальной
0
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
26.09.2010, 19:00  [ТС] 5
тупой вопрос:Как объявлять глобальный переменные? в DATA или DATA?, или как-то по-другому?
0
Goodwin98
2523 / 819 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
26.09.2010, 19:22 6
Да то, что в секциях .DATA и .DATA? это глобальные переменные.
напишите в одной из них
Assembler
1
ofs OPENFILENAME <>
2
semiono
12 / 12 / 0
Регистрация: 14.09.2010
Сообщений: 287
Записей в блоге: 6
28.09.2010, 19:48 7
А мне тогда тоже интересно, давно хотел спросить это что <>
0
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
28.09.2010, 19:57  [ТС] 8
кстати,да. что означает это "<>" и для чего оно?
0
Goodwin98
2523 / 819 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
28.09.2010, 21:22 9
Лучший ответ Сообщение было отмечено как решение

Решение

в угловых скобках описываются различные части структуры, т.е. внутри можно указать какое значение будут принимать hwndOwner, nMaxFile и остальные из данной структуры.
Если внутри них пусто, либо стоит знак ?, значит элементы структуры инициализируются значениями по умолчанию.
3
semiono
12 / 12 / 0
Регистрация: 14.09.2010
Сообщений: 287
Записей в блоге: 6
29.09.2010, 19:55 10
Я уже знал это однажды и забыл! Надо как-то закрепить в уме. ))
Просто <> скобки напоминают какое-то действие, вместо того чтобы напоминать скобки <1,2,3,4,?>
Ну надеюсь я больше не буду забывать!
0
29.09.2010, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2010, 19:55

Непонимание со слайдером
Добрый вечерок. Делаю сайт - презентацию приложения. Так вот нужно сделать слайдер внутри...

Псевдо if-else - непонимание
Выполняю такой код. Должны вывестись фамилии и имена, или же что студенты не найдены. В итоге...

АВГ. Есть непонимание
установил пробную платную версию продукта AVG - антивирусника, было обещано, что по завершению...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru