» Вопросы по программированию на C/С++
Итак....
http://rghost.ru/43194834
1. Никогда раньше не работал с голым asm'ом - только в составе VS. Поэтому долго втыкал, где взять все эти includes. В конце концов скачал MASM32 v11.
2. Сделал по аналогии с твоей DLL точно такую же, но свою - из тех заготовок, что MASM предложил Отличия от твоей минималистской версии есть, но лишь косметические. Если убрать пару строчек - то будет один в один соответствовать.
3. У меня все заработало, как и ожидалось. testdll.dll создалась, ta.exe (test application) создалась, ta использовала самым утилитарным образом tstproc и вывела результат. Результат совпал с посчитанным на бумажке То есть проверка работы tstproc показала, что tstproc работает правильно.
4. Теперь все же отличия.
a. Вместо кучи includes только один, вставленный самим MASM. Других includes он не просил, успешно работал с этим одним.
b. Мне было странно видеть в DEF имя функции в кавычках да еще и с обозначением размера стека. Да еще и mangled. MASM, as I suspected, doesn't mangle proc names. So I used the proc name as it was, "tstproc".
PS: Когда я все это написал, до меня дошло, что тебе, вроде как требовалось вызвать tstproc из C application. Так что файл T1 перезалит, добавлено ConsoleApplication. ConsoleApplication также работает, как и asm версия - т.е. складывает таки чиселки
http://rghost.ru/43194834
1. Никогда раньше не работал с голым asm'ом - только в составе VS. Поэтому долго втыкал, где взять все эти includes. В конце концов скачал MASM32 v11.
2. Сделал по аналогии с твоей DLL точно такую же, но свою - из тех заготовок, что MASM предложил Отличия от твоей минималистской версии есть, но лишь косметические. Если убрать пару строчек - то будет один в один соответствовать.
3. У меня все заработало, как и ожидалось. testdll.dll создалась, ta.exe (test application) создалась, ta использовала самым утилитарным образом tstproc и вывела результат. Результат совпал с посчитанным на бумажке То есть проверка работы tstproc показала, что tstproc работает правильно.
4. Теперь все же отличия.
a. Вместо кучи includes только один, вставленный самим MASM. Других includes он не просил, успешно работал с этим одним.
b. Мне было странно видеть в DEF имя функции в кавычках да еще и с обозначением размера стека. Да еще и mangled. MASM, as I suspected, doesn't mangle proc names. So I used the proc name as it was, "tstproc".
PS: Когда я все это написал, до меня дошло, что тебе, вроде как требовалось вызвать tstproc из C application. Так что файл T1 перезалит, добавлено ConsoleApplication. ConsoleApplication также работает, как и asm версия - т.е. складывает таки чиселки
не знаю зачем так сделано - в масме внутри есть папка с примерами, этот пример оттуда, только там примеры все фиговые перегружены лишним, я просто его упростил до состояние что ничего не выкинешь. если в деф файле заменить _testproc@8, на просто testproc все тоже будет работать. даже поудобнее потому что если потом дллку загружать с помощью loadlibruary и getprocaddres не надо это дебильное имя использовать _testproc@8
Цитата:
это не принципиально, тоже самое там написано в этом инклуде, им любят пользоваться те кто в масм из си приходят
может в семерке какая то защита включена, или может там юзер с правами урезанными. в чем же дело может быть. другие программы там же работают. может дллку надо как тов системе регистрировать?
Цитата:
Вместо кучи includes только один, вставленный самим MASM.
это не принципиально, тоже самое там написано в этом инклуде, им любят пользоваться те кто в масм из си приходят
может в семерке какая то защита включена, или может там юзер с правами урезанными. в чем же дело может быть. другие программы там же работают. может дллку надо как тов системе регистрировать?
См. update предыдущего поста
Подозреваю, что все дело в mangled name. Так как MASM никаких операций над именами экспортируемых функций не производит, то скорее всего, в DLL, сделанной из testdll.asm попросту отсутствует _tstproc@8. В тексте самой DLL ее нет, там есть просто tstproc.
Впрочем, специально я этот вопрос не изучал, лишь предположил, что имена используются "as is", без изменения. На этом предположении построены ta.exe и ConsoleApplication. Так как оба работают, делаю вывод, что предположение было верным.
Подозреваю, что все дело в mangled name. Так как MASM никаких операций над именами экспортируемых функций не производит, то скорее всего, в DLL, сделанной из testdll.asm попросту отсутствует _tstproc@8. В тексте самой DLL ее нет, там есть просто tstproc.
Впрочем, специально я этот вопрос не изучал, лишь предположил, что имена используются "as is", без изменения. На этом предположении построены ta.exe и ConsoleApplication. Так как оба работают, делаю вывод, что предположение было верным.
ну я рад что ошибка не у меня. но как понять почему на семерке не работало. к тому же я в той семерке туплю куда тыкать
Опять см. update of the previous post
да там вроде говорили что не работало и когда через lib при компиляции дллка связывалась и когда вызвалось доалибруари тоже. и потом если имя функции неправильно указать там ошибка не номер пять получается
Было проведено небольшое исследование. Да, в твоей dll экспортируемая функция действительно имеет имя _tstproc@8. (Правда, я не понимаю, как MASM понял, что _tstproc@8 это tstproc. Не занимался же он лексическим анализом... Впрочем, это не суть важно.) Сейчас использовал с ConsoleApplication твою dll и функцию с именем _tstproc@8. Работает, аднака
Да, и вот еще что. Если вызвать GetProcAddress с имемем функции, отсутствующей в DLL, она вернет nullptr. Если это дело не проверить и использовать nullptr как адрес функции, будет 100% 0x00000005 (Access denied).
Да, и вот еще что. Если вызвать GetProcAddress с имемем функции, отсутствующей в DLL, она вернет nullptr. Если это дело не проверить и использовать nullptr как адрес функции, будет 100% 0x00000005 (Access denied).
Всю ночь качать "Microsoft Visual Studio Express 2012", чтобы в итоге выяснить что ему нужен фреймворк 4.5, который не ставиться под WinXP.
я когда то ставил самую простую причем. чтоб с ней разобраться надо кучу времени убить. есть Си компиляторы попроще
Цитата:
понял, что _tstproc@8 это tstprocпотому что это дефолтное соглашение stdcall для венды...
а в межязыковых игрищах надо самому этим управлять...
>bomzzzА на твоём компе в том конце откомпилированные dll+exe работают?
Вспомнил, что некоторые антивири подозрительно относятся к прогам компилированным на MASMe. Не тот ли случай?
Вспомнил, что некоторые антивири подозрительно относятся к прогам компилированным на MASMe. Не тот ли случай?
просил отключить антивирус, аваст по моему стоял. не помогло. ниче они не ругаются на масм, Си компилятор хорошо оптимизирован программы совсем чуть чуть отличаются
у менявсе работает и то что ItsJustMe выложил тоже
Добавлено:
Добавлено:
и ошибка возникает ни когда лоадлибруари - файл не заблокирован, а когда гетпрокадрес
у менявсе работает и то что ItsJustMe выложил тоже
Добавлено:
Добавлено:
и ошибка возникает ни когда лоадлибруари - файл не заблокирован, а когда гетпрокадрес
Что GetLastError() сразу после GetProcAddress() выдаёт?
5-ку
http://msdn.microsoft.com/en-us/library/ms681382.aspx
Цитата:
http://msdn.microsoft.com/en-us/library/ms681382.aspx
Цитата:
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
Если посмотреть код GetProcAddress(), то видно, что такую ошибку эта функция вообще не возвращает, только ERROR_INVALID_PARAMETER, ERROR_MOD_NOT_FOUND, ERROR_PROC_NOT_FOUND и ERROR_INVALID_ORDINAL.
Или там хук накинут и ошибку код хука возваращает, или ошибка всё-таки дальше по ходу появляется.
Или там хук накинут и ошибку код хука возваращает, или ошибка всё-таки дальше по ходу появляется.
ошибку система возвращает
AZJIO
Цитата:
2012-я студия не поддерживает Windows XP, это же в требованиях написано.
2010-я пойдет на WinXP только с третьим сервиспаком.
2008-я идет без проблем.
Я пользуюсь 2008-й под WinXP и 2010-й под Win7.
bomzzz
Цитата:
Не знаю, я в свое время начинал в студии без проблем. Можно сразу уже работать.
Со всеми настройками проектов уже потом по мере необходимости разбираешься. К тому же необходимость такая еще не скоро возникает.
А вот запустил я недавно Eclipse под виндой, вот там да - надо разбираться (: даже чтобы просто проект собрать
Цитата:
Всю ночь качать "Microsoft Visual Studio Express 2012", чтобы в итоге выяснить что ему нужен фреймворк 4.5, который не ставиться под WinXP.
2012-я студия не поддерживает Windows XP, это же в требованиях написано.
2010-я пойдет на WinXP только с третьим сервиспаком.
2008-я идет без проблем.
Я пользуюсь 2008-й под WinXP и 2010-й под Win7.
bomzzz
Цитата:
я когда то ставил самую простую причем. чтоб с ней разобраться надо кучу времени убить. есть Си компиляторы попроще
Не знаю, я в свое время начинал в студии без проблем. Можно сразу уже работать.
Со всеми настройками проектов уже потом по мере необходимости разбираешься. К тому же необходимость такая еще не скоро возникает.
А вот запустил я недавно Eclipse под виндой, вот там да - надо разбираться (: даже чтобы просто проект собрать
а потом программы сделанные этой студией будут требовать дллки черти какие причем разных версий. таким софтом стараюсь не пользоваться. одному только замену найти не смог ATI Tray Tool - так что просто им не пользуюсь
bomzzz
Чтобы программы дллки не требовали, надо в конфигурации Release собирать, а не в Debug. Debug - это неоптимизированный код для отладки, такой только из студии есть смысл запускать.
Чтобы программы дллки не требовали, надо в конфигурации Release собирать, а не в Debug. Debug - это неоптимизированный код для отладки, такой только из студии есть смысл запускать.
жалко что это не все знают
Добавлено:
а не скажете на студии 10 переменные XMMWORD и YMMWORD можно описать? не уверен что правильная постановка вопроса
Добавлено:
дайте пожалуйста файлы
lib.exe
link.exe
ml.exe
msobj110.dll
mspdb110.dll
mspdbcore.dll
mspdbsrv.exe
msvcr110.dll
из самой последней студии 2012 самой последней версии
Добавлено:
а не скажете на студии 10 переменные XMMWORD и YMMWORD можно описать? не уверен что правильная постановка вопроса
Добавлено:
дайте пожалуйста файлы
lib.exe
link.exe
ml.exe
msobj110.dll
mspdb110.dll
mspdbcore.dll
mspdbsrv.exe
msvcr110.dll
из самой последней студии 2012 самой последней версии
все кабинетные файлы перековырял и инсталяторы. нашел только ml64.exe. никто не знает где в en_visual_studio_professional_2012_x86_dvd_920779 вышеупомянутые файлы спрятались?
kotlomoy
Цитата:
Скачал Eclipse, жаль что только англ. фейс, хотя и не страшно. Но не могу найти кнопку компиляции.
Кстати, пока освобождал место под установку VS нашёл примеры для "wxDev-Cpp", который как ни странно он воткнул в "C:\ProgramData\Dev-Cpp\examples\wxWidgets", а не в каталог инсталяции. Но судя по размеру компилируемых файлов (9 Мб) стало ясно что он как в Qt использует собственные классы, хотя неплохо было бы такую же коллекцию иметь с использованием стандартных элементов Windows.
Цитата:
2012-я студия не поддерживает Windows XP, это же в требованиях написано.Что-то не вижу чтобы там в требованиях было написано, а раз про требования ничего не написано то подразумевается что должно работать на не закрытых проектах Windows. Ну да ладно, судя по фремворк 4.5 понятно, что должно быть где то написано, плохо что не навидном месте.
Скачал Eclipse, жаль что только англ. фейс, хотя и не страшно. Но не могу найти кнопку компиляции.
Кстати, пока освобождал место под установку VS нашёл примеры для "wxDev-Cpp", который как ни странно он воткнул в "C:\ProgramData\Dev-Cpp\examples\wxWidgets", а не в каталог инсталяции. Но судя по размеру компилируемых файлов (9 Мб) стало ясно что он как в Qt использует собственные классы, хотя неплохо было бы такую же коллекцию иметь с использованием стандартных элементов Windows.
AZJIO
она на хп вообще не ставится, или ставитс но не работает?
Добавлено:
Цитата:
попробую все кабинеты распаковать в одну папку может найдутся
она на хп вообще не ставится, или ставитс но не работает?
Добавлено:
Цитата:
@ECHO OFF
COLOR 9F
rem dir /b G:\
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R "G:\" %%I IN (.) DO (
SET string=%%I
REM echo !string:~0,-1!*.cab
expand !string:~0,-1!*.cab -F:* c:\temp
)
pause
попробую все кабинеты распаковать в одну папку может найдутся
у меня такие есть для всех студий, насобирал когда ати трей тул был нужен. к драйвере интел нашел утановщик который ровно нужные библиотеки ставит и почти не гадит в систему
Добавлено:
уря все файлики нашлися
Добавлено:
уря все файлики нашлися
bomzzz
Цитата:
Ассемблером не пользуюсь, так что не по адресу вопрос.
Могу лишь отослать:
http://msdn.microsoft.com/en-us/library/cw0399sf%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/ee404743%28v=vs.100%29.aspx
AZJIO
Цитата:
http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop#product-express-desktop-details
Цитата:
Я сам не стал разбираться с этим, не могу помочь
Цитата:
http://ru.wikipedia.org/wiki/WxWidgets
Цитата:
а не скажете на студии 10 переменные XMMWORD и YMMWORD можно описать?
Ассемблером не пользуюсь, так что не по адресу вопрос.
Могу лишь отослать:
http://msdn.microsoft.com/en-us/library/cw0399sf%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/ee404743%28v=vs.100%29.aspx
AZJIO
Цитата:
Что-то не вижу чтобы там в требованиях было написано
http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop#product-express-desktop-details
Цитата:
Но не могу найти кнопку компиляции.
Я сам не стал разбираться с этим, не могу помочь
Цитата:
он как в Qt использует собственные классы
http://ru.wikipedia.org/wiki/WxWidgets
6.4 версия ml.exe sse вообще не поддерживает. соответсвенно и xmmword не работает
8.0 версия уже поддерживает mmx sse и xmmword работает
11 версия из 12 студии (видимо начиная с 10 студии) уже поддерживает ymmword.
хоть это одно и тоже 128 битная переменная, лишь маркер позних версий.
на сайте микрософта выложена отдельно 8 версия. а я хотел вытащить более поздние из студии. вытащить вытащил да чета они не работают. возможно надо устанавливать а потом вытаскивать
Добавлено:
kotlomoy
а ты не можешь у себя эти файлики вытащить?
8.0 версия уже поддерживает mmx sse и xmmword работает
11 версия из 12 студии (видимо начиная с 10 студии) уже поддерживает ymmword.
хоть это одно и тоже 128 битная переменная, лишь маркер позних версий.
на сайте микрософта выложена отдельно 8 версия. а я хотел вытащить более поздние из студии. вытащить вытащил да чета они не работают. возможно надо устанавливать а потом вытаскивать
Добавлено:
kotlomoy
а ты не можешь у себя эти файлики вытащить?
bomzzz
Я когда вытащил MASM32 v11 с http://www.masm32.com/masmdl.htm , выяснил, что в действительности там MASM 6.
А не проще тебе просто VS2012 поставить и юзать из нее только MASM? VS хоть и полненькая , но при размерах нынешних хардов это совсем не критично.
Я когда вытащил MASM32 v11 с http://www.masm32.com/masmdl.htm , выяснил, что в действительности там MASM 6.
А не проще тебе просто VS2012 поставить и юзать из нее только MASM? VS хоть и полненькая , но при размерах нынешних хардов это совсем не критично.
ради нее еще надо семерку ставить и фреймворк черти какой и весит она в распакованном виде больше 6 гигов и файлов там 26000. а масм32 50 мб занимает. причем там чепухи еще полно, какие то редакторы беспонтовые и программы дебильные.
скачал 10 студию вытащил из нее мл.екзе. все работает YMMWORD это 256 битная переменная, видимо для sse 4 или выше. link.exe и lib.exe не заработали. попроверял вроде все компилится старое, драйвер скомпилил - но тут еще недоработано в масме надо подкладывать дофига
скачал 10 студию вытащил из нее мл.екзе. все работает YMMWORD это 256 битная переменная, видимо для sse 4 или выше. link.exe и lib.exe не заработали. попроверял вроде все компилится старое, драйвер скомпилил - но тут еще недоработано в масме надо подкладывать дофига
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.