-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
||||||
1 | ||||||
Сделать отладочную DLL (изменить cdecl на stdcall) для вызова из VB29.12.2017, 14:02. Показов 4901. Ответов 77
Метки нет (Все метки)
Добрый день.
А как обнаружить свой адрес при входе в функцию какой-либо DLL-ки ? А по русски говоря: Сохранить регистр EIP. У меня пришло на ум только это (в отладчике, asm-ом не занимаюсь):
А не бывает ли на свете "ещё изящнее" решения ? И это, ... все 52 фуни (!!! МОЕЙ !!!) DLL-ки поголовно при входе в EAX содержат свою точку входа. Наверное это всё-таки "медвежья услуга" компилятора вызывающей программы ? Стоит на это надеяться ? А то мож зря процедуру "себе под нос" затеваю ? Заранее спасибо !
0
|
29.12.2017, 14:02 | |
Ответы с готовыми решениями:
77
Передача дополнительного аргумента в функцию stdcall/cdecl? Макрос для вызова подпрограмм с соглашением cdecl Передача структуры данных в DLL (stdcall) Конфликт forward и stdcall в dll-библиотеке |
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
14.01.2018, 19:03 [ТС] | 42 |
Старый Новый год в разгаре ?
... Не работает ... ... Не восстанавливает ...
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
14.01.2018, 19:59 [ТС] | 44 |
Виноват, Начинаю Исправляться !
0
|
Модератор
|
|
14.01.2018, 20:14 | 45 |
Нет.
В общем я не пойму что ты мне хочешь сказать. Говнокод с таймером вообще развеселил - вместо вызова функции в цикле городить таймер (мог бы поступить по-умнее и просто вызов cdecl функции обернуть в другую функцию). В том виде в котором ты вызываешь стек не восстанавливается после вызова функции, т.к. с Declare оператором декларируются только stdcall функции. Если это работает в каких-то отдельных случаях (из-за указателя кадра стека и т.д.), это не означает что это работает всегда - в любой момент после очередной перекомпиляции код просто перестанет работать.
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
14.01.2018, 21:09 [ТС] | 47 |
Это твой код (лимон раз вызвать без пауз, без обработки возврата, тоже кстати развеселил).
Даже не знаю, где-ж такое может понадобиться ? Ты покажи-ка да расскажи-ка нам всем - как работает синяя кнопка. И что там стек нам всем говорит (как он там не работает, не восстанавливается) ??? (Его наверное The_trick там восстанавливает ?) В таймер я её засунул, чтоб ты видел, как "Наш дорогой Вася за мной-идиотом стек восстанавливает". Не нравиться таймер, найди другой способ выйти из лимоннго цикла. ... Declare оператором декларируются только stdcall функции ... А мы вторым номером взяли, и задекларировали её (вот собаки страшные), и откуда-ж наш Вася будет знать, что ему подсовывают, а может я ему подсуну moyDecl, и как же это он догадается, а ??? ... Если это работает в каких-то отдельных случаях (из-за указателя кадра стека и т.д.), это не означает что это работает всегда ... Пример Пжлста ! ... в любой момент после очередной перекомпиляции код просто перестанет работать ... Пример Пжлста ! Не забудь, что: "Нужно ДАВАТЬ возможность любимому Васе исправлять стек за всяческими идиотами" Т.е. ДАВАТЬ ПАУЗУ, пока всяческий идиот не дошёл до миллионного вызова ! ... стек не восстанавливается после вызова функции ... А что ж он делает, если нашего васю прервать, а не добивать до лимона раз ? ... мог бы поступить по-умнее и просто вызов cdecl функции обернуть ... Я и "обернул" RETN-ами, и прям во вражеском тылу, что ещё может быть "обернутестее" : Или ты считаешь свою Inlain-высшим совершенством штоль ? Ещё раз спрашиваю (при свидетелях) : ВОССТАНАВЛИВАЕТСЯ СТЕК ИЛИ НЕТ ??? Добавлено через 17 минут Ты давай теперь отмазки-то не клей задним числом (SubMain) Оно до.уя где ещё может не запуститься ... Чо там со стеком то происходит ???
0
|
Модератор
|
|
14.01.2018, 22:03 | 48 |
Во многих задачах, к примеру игровой цикл, цикл прокачки сообщений и т.п. любой цикл.
Он работает исключительно из-за того что ты вместо цикла делаешь через таймер и тебе повезло что в процедуре идет обращение через указатель кадра стека и нет инструкций сохраняющих состояние и восстанавливающих его между вызовами. Чуть поменяв код можно уронить его точно также как я уронил тут. В таймер ты его засунул для того чтобы "по-кривому" обойти ограничение размера стека в одной процедуре. По-кривому, потому что это работает через раз. Естественно компилятор сделал адресацию через EBP и внутри нет вызовов PUSH POP между вызовами cdecl функции, но вот я чуть переделал твой код и он сразу же упал. Да ты можешь что угодно туда подсунуть, вопрос корректно ли это будет работать? Скидывал уже несколько примеров. Пример с Sub Main, скомпилируй с оптимизациями - не работает, скомпилируй без оптимизаций - заработает. После очередной перекомпиляции код просто перестал работать. Где такое правило написано? Это для всех cdecl функций такое? Зайди на форум к сишникам и скажи такое. Смотря в каком примере, если в моем - упадет, если в твоем - просто повезло что ты вызываешь в процедуре с адресацией через EBP. Это называется костыли, и так не нужно делать, нужно делать нормально через декларацию в tlb тогда и оборачивать ничего не нужно. Не знаю про что ты. Нет, примеры что я скинул ранее это доказывают. А ты не сливайся, какие отмазки-то? Тебе показали простейший пример о который все твои мифы о работе "просто так" cdecl функций разрушаются. Ты не понимаешь что ли? Тебя заблокировать? Тебе сколько нарушений нужно выдать чтобы ты нормально общался? Портится, портится....
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
23.01.2018, 00:10 [ТС] | 49 |
... наипростейший код с вызовом твоей функции валит все приложение ...
А в какой прос(т)рации в данный момент находится наш таймер (в SubМашке) ? Когда у нас в Васе объекты рожаются, "профессор" ты наш ... ... Во многих задачах, к примеру игровой цикл ... А ты вообще "паузу" собираешся" давать прожке во время "игровых циклов", иль хрен с ней, пусть висит, пока я до лима досчитаю. ... тебе повезло ... в любой момент после очередной перекомпиляции ... Да кому "повязёть" у того хто снясёть ? Не вижу никаких "вязений". Да хоть лимон раз компилячь, дал паузу Васе - стек цел. ... идет обращение через указатель кадра ... ... нет инструкций сохраняющих состояние и восстанавливающих его между вызовами ... Во пурга (отмазки, и т.д). Где ж ты таковое видовал в нашей Васе ? Вася отдал стек, вася его примет в своём "кадре" (слово то какое отковырял, наверное из диссертации). ... как я уронил тут ... Я тебе уже ... , почему ты его уронил. Возьми, API-шный тимер, да "роди" его в SubМане, если тебе так охота. ... Это называется костыли ... и так не нужно делать ... Вот он, Зав. Ортопедическим отделением выискался. Тот у нас на костылях, этот на протезах. А сам на чём, на коляске штоль ? Прям наверное Доцент, не иначе. Откуда такой "решала" выискался, кому и шо тут кодить можно ? ... Ты не понимаешь что ли? Тебя заблокировать? ... Ой, я щас расплачусь, глобус перестанет крутиться. Вот прежде чем блохать, дай ... , а не так: Я тебя блохну, а сам чо-нить расскажу, авось не ответить. Вот блохни, и сам ... (успокойся, ничего не писячь). Да, кстати, чой-то вы друг другу давно "галочек" за самый ответный ответ не ставили, пораб уже. И ещё... Чой-то из моего поста #47 выдернули славное слово "говнокод", а из "славного" поста #45 его не "дёрнули". Какое-то однобокое "модерачество" у вас получается. ... Портится, портится ... Но до двух мулей досчитывает. ...
0
|
Модератор
|
|
23.01.2018, 01:38 | 50 |
Причем тут таймер? Для чего он нужен? Я просто вызываю cdecl функцию и все.
Бррррр.. Ты о чем? Ты хоть раз видел как игровой цикл устроен? Или тот же цикл обработки сообщений? Нет. Пургу несешь ты. Видел в отладчике. Как ты пишешь в раздел ассемблера и не знаешь что такое кадр стека? https://ru.wikipedia.org/wiki/... 0%B4%D1%80 Для чего мне таймер? Я просто хочу вызвать функцию и все, для чего мне таймер? Тебе видимо нравится в бане сидеть? Да не плач, просто веди себя адекватно и соблюдай правила. Ну тебя заблокировали за нарушение правил форума, если что-то не устраивает, обращайся к администрации с жалобами. Да поставим, не беспокойся, когда нужно будет. Как в примере Сделать отладочную DLL (изменить cdecl на stdcall) для вызова из VB
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
||||||
23.01.2018, 11:49 [ТС] | 51 | |||||
... Причем тут таймер? Для чего он нужен? ...
Нет, ты мне вообще скажи: "Синяя" кнопка у тебя досчитывет до двух млн, иль нет ? (А то мож только мне постоянно "везёт") Не нравиться таймер, нажми сам 2 млн раз на кнопку (без таймера), досчитает до 2 млн иль нет ? Сам же пишешь: ... Или тот же цикл обработки сообщений ... Вот и "заряди" любой CallBack, и посмотри, досчитает иль нет. (В т.ч. "синяя кнопка", и Таймер - те же CallBack-и). ... Для чего мне таймер? Я просто хочу вызвать функцию и все ... Ну и вызови, например 100.000 раз. А если больше надо - то вызывай "пачками", из CallBack-а например. Третий раз спрашиваю ? Восстанавливает наш Вася стек (после CallBack-а) за реальцами, вызывающими 2 млн раз некую cdecl-фуню ? - Не вижу никаких "вязений". - Нет. Где именно мне "повезло" ? ... пишешь в раздел ассемблера и не знаешь что такое кадр стека? ... Эти заумности к чему ? Чем отличается "кадр стека" от просто "стека" (в нашем Васе) ? ... Тебе видимо нравится в бане сидеть? ... Да лучше в бане "попариться", чем с "авторитетами" ... ("разговаривать"). Вот никак не могу "въехать": С какой-такой радости "ковыряние" во вражеской DLL-ке - это костыли, а "ковыряние" в TLB-хе - это ПЗБС ? Это кто такой тут "решает", где мне "поковыряться" ? И ещё упустил: ... Зайди на форум к сишникам ... А они что у нас "Боги" кодинга ? (Косячуть не меньше нашего). --- Ладно, вопрос по asm-у: (Хотя, не верю, что получу ответ). В asm-е (x86) есть ли команды типа:
0
|
Модератор
|
|
23.01.2018, 13:00 | 52 |
Зачем отвечать вопросом на вопрос? Я у тебя спрашиваю конкретный вопрос для чего мне таймер?
Да зачем мне 2 млн раз нажимать на кнопку? Я тебе скинул примеры где вызов cdecl функции не работает, всё. Одно это разбивает все мифы о том что это работает через declare. Ах ты какой хитрый, зачем мне в Callback заражать? Я хочу просто вызвать функцию, без всяких колбеков, мб мне еще RPC или APC посоветуешь для этого? слушаюсь (шучу). Я лучше сделаю правильно изначально без всяких костылей. В твоих примерах после вызова функции стек не восстанавливается. Возьми отладчик и проверь. Повезло тебе в том что компилятор использовал EBP для адресации (это далеко не всегда так), повезло что не PUSH/POP между вызовами функции как в твоем же 36 посте. Какие заумности? В твоем примере обращение идет через указатель кадра стека (EBP), а регистр ESP (указатель на вершину стека) не восстанавливается после вызова функции. Хорошо. KISS Тебе никто не запрещает извращаться как ты захочешь. Ну ты был в ветке VB6, там никого не хотел слушать, пришел сюда - тоже самое, мб. сишники для тебя тогда в авторитете? Расскажи им про вызов функции через таймер. JMP FAR 0023:Absolute в режиме WOW64, в 32 битном режиме подставляешь свой CS MOV EAX, address JMP EAX CALL lbl lbl: POP EAX SUB EAX, 100
0
|
ФедосеевПавел
|
||||||
23.01.2018, 20:43
#53
|
||||||
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
24.01.2018, 22:38 [ТС] | 54 |
… Gazzi, вы не способны к обучению…
Во те раз… Сами же пишем про пунхт 3.1, и опять "утверждения"… Ну вот откуда вам знать, к чему я способен, а в чём "дуб-дубом", вы шо, со мной "с одной бутылки пили", иль в одном танке "за догонкой" ездили. Вот какое мне в ответ сделать "утверждение"… На форуме оказывается есть ещё и "педагоги" (ни разу правда ничему ни научившие в рамках текущей темы, но зато успевшие "потыкать", что мне надо делать, а что не надо, где тут взлом, а где "излом", "перелом" и т.д. И даже успевшие поставить очень важную "галочку"). … вижу - только попререкаться… Во те два… Выяснили целую кучу "важностей", в т.ч. и в закрытой "педагогами" (по непонятной причине) предшествующей теме, а именно: 1). Внимательно смотришь в PE-заголовок, что бы понять куда тебе "влить" свой код, если места мало, то ещё внимательнее смотришь в него-же, чтобы не сломав исходник "растопырить" себе место. 2). Нету другого способа "обнаружить себя" в чужом коде, кроме как вызвать "себе под нос" команду CALL. 3). Так и не смогли выяснить, с какой-такой радости поголовно все фуни в EAX на входе имеют свою точку входа, и можно ли в дальнейшем "опираться" на сей факт. 4). Попутно всё-таки "модернизировали" подопытную DLL-ку, и передали ёё "заказчику", при этом он был рад практически до…(упора). 5). Выяснили, что наш "Вася-6" всё-таки "и так" поддерживает cdecl (если миллион раз не вызывать без тайм-аута, не делать оптимизаций, и т.п.), или поддерживает cdecl при "многомиллионном" вызове, если поковыряться в TLB (или "надеть шапочки" на функции внутри DLL), и остались каждый при своём мнении. 6). Все команды MOV работают исключительно с абсолютной адресацией, и чтобы получить "относительную" - надо ещё "попыхтеть". 7). Узнали про существование (но пока не "взяли на вооружение") такие две вещи как: DispCallFunc и inline-assembler. А вы говоришь "попререкаться"… --- … Ах ты какой хитрый, зачем мне Callback заряжать? … Ах ты какой не менее хитрый, зачем мне TLB ковырять, мне проще "шапочки" на все фуни одеть. Есть DLL-ка, вот в ней и пусть "всё сидит", нефиг плодить "обёртки". А "виноваты" как-раз "Сишники", ну только о себе думают, мать ёё. … В твоих примерах после вызова функции стек не восстанавливается. Возьми отладчик и проверь… А после всех завершений всех процедур в программе - он на месте. (Ни разу в жизни не приходилось вызывать миллион раз без тайм-аута). … компилятор использовал EBP для адресации (это далеко не всегда так) … Ни разу на такое не "натыкался". Примерчика не "завалялось" ? … В твоем примере обращение идет через указатель кадра стека (EBP) … А что, мы можем вызвать фуню с одним EBP, а получить с другим ? … Ну ты был в ветке VB6, там никого не хотел слушать… Тоже самое: ты делай так, но не делай эдак. Я и там задавал конкретный вопрос: Как получить "ЭТО", А получал ответ: Надо делать "ТО". Можно я сам буду решать, так мне сделать, или эдак. Да и вопрос не детский был, вот и не получил ответа, всего делов-то. (А ведь где-то он наверное лежит-дожидается "на белом свете"). Зато был успешно послан к "Пупкам". Те тока свою "бухгалтерию" и знают, больше нифига с них не "выдоишь" (или молчат, редиски). --- (Все вопросы в "разрезе" Win32). … mov EAX, [ адрес, находящийся например на 100 байт "назад" ] … Ну это, как я понял, получается та же теорема: Вызови CALL себе "под нос". Я просто подумал, мож чо пропустил "на эту тему" (лежащее как раз "под носом"). … в 32 битном режиме подставляешь свой CS … Вот тут не допонял. А вообще какую нибудь пользу от CS можно "поиметь", и как можно "привязать" сиё значение например к "абсолютности" адресов в конкретно взятой DLL-ке ? Ну ещё выплыли: JMP, CALL. А у этих возможны оба вида адресации (абсолютная, относительная, или это я "не способен к обучению") ? Заранее спасибо.
0
|
Модератор
|
||||||
25.01.2018, 00:07 | 55 | |||||
Это видно по дискуссии.
Не всегда. Только объявленные через Declare. Нет, не поддерживает. И не обязательно миллион раз вызвать, достаточно один, см. пост 46. Я уже тебе написал: Любая программа содержит как минимум цикл обработки сообщений (для VB-шников он скрыт, но есть ситуации когда он нужен, а формы не нужны, тогда и придется делать его вручную). Циклы вообще неотъемлемая часть почти любой программы. Ну как пример, тут - процедура DriverEntry. Вот еще один простой пример:
Нет. Просто EBP может использоваться для другой цели и вообще необязательно EBP можно использовать любой другой регистр, просто всегда делается через этот регистр. Если же обращение идет через ESP тогда любой неправильный cdecl вызов будет фатален. Хм... А как нужно было? Это сегментный регистр кода, в 32 битном режиме он используется при формировании линейного адреса. В WOW64 всегда равен 0x23, если нужно переключится в 64 битный режим просто "прыгаешь" на 0x33 сегмент, тем самым изменяешь значение регистра CS который после этого указывает на другой дескриптор (№6), который переключает процессор в 64 битный режим. "Прыжок" обратно переключит обратно в 32 битный режим. Второй момент - для чего нужен именно абсолютный адрес? Оба. JMP FAR, CALL FAR
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
25.01.2018, 12:30 [ТС] | 56 |
… Это видно по дискуссии …
Ну, мне тоже, много чо видно, ну я ж не квакаю у кого скока извилин "осталось". … все фуни в EAX на входе имеют свою точку входа … … Не всегда. Только объявленные через Declare … А вообще, на это можно "опираться" в дальнейшем. В WinAPI никакой "закон" не придумали, чтоб при вызове фуни - закидывать в EAX её же EntryPiont. ("Придумали" же - восстанавливать кое какие регистры при возврате). Другие компиляторы тоже так поступают ? … Я уже тебе написал: Тебе никто не запрещает извращаться как ты захочешь … Опять. Ну вот кто у нас такой "решала" ? Что нельзя в DLL-ку лазить ? Чем "мой" метод хуже "твоего", я никак въехать не могу ? Ты что, опрос проводил, с "Билликом"(Дебиликом) "с одной бутылки квасил, и на одном танке в баню ездил" ? По каким критериям мы "фишки раздаём" ? … тебе повезло … Да шож я такi везучий-то (пiду в СпiртЛото сыграю). Вот, не иначе - Опять вязуха: (См.Вложения) Извини, но у меня нет других слов: Мы долго ещё "пургу поносить" будем на одну и туже тему ? Я те шо, мальчик-отгадайчик шоль, твои "домашние задания" решать ? (Ну говорю-ж: "Педагоги" мать ёё). … Хм... А как нужно было? … Ну ты ж не дал там ответа, а к "пупкам" не забыл послать… --- … польза от CS … Я имел ввиду: Высчитать абсолютный адрес (на начало модуля, на начало всей проги в памяти - на header например, да на что-нибудь "любое", но внутри текущей программы). Или "останавливаемся" на "CALL себе под нос", и не "рыпаемся ? … JMP FAR, CALL FAR … Поизучаю. Кстати: "О птичках". … Процедура DriverEntry … Нигде не "заваялся" некий "пустой" драйвер, например NT. Тока штоб "вставал" и можно даже не удаляться. А то у меня что-то не выходит "каменный цветок". Никак не могу Сишный проект "собрать" (мать иих). Или лучше в "драйверный" отдел перелезть (там мы ещё "не арались" (шучу)). Заранее спасибо.
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
25.01.2018, 12:31 [ТС] | 57 |
Вложение:
0
|
Модератор
|
|
25.01.2018, 13:34 | 58 |
"квакаешь"
Это не имеет смысла, поэтому не придумали. Просто при вызове Declare функции в первый раз происходит вызов LoadLibrary и GetProcAddress и адрес функции сохраняется в дескрипторе функции, далее возвращенное значение (оно как известно в EAX) используется в инструкции JMP EAX, поэтому ты его получаешь. Ну как минимум лицензионное соглашение и авторские права. Ну а вообще кто решает что микроскопом нельзя забивать гвозди? Конечно можно, но есть молоток. Да ты что, хочешь меня надурить что ли? Ты зачем оптимизации поотключал? Дал.
0
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
26.01.2018, 09:49 [ТС] | 59 |
… "квакаешь" …
Ну пущай будет "квакаю" (лишь бы "делу не мешало") … лицензионное соглашение … Да ежли повнимательнее "Васю" почитать, так мы и им пользоваться не можем. … микроскоп … А если микроскоп "для китайских" глаз сделан ? Вот не влезають туда мои зени, что тогда делать? Они его для своих "узкоглазых" сделали (как и ту DLL-ку, для своих "узкопрофильных"). Вот тогда можно и гвоздь забить. А можно отремонтировать/модернизировать для "своих" (что и было сделано с DLL). А вот кстати если микроскоп отремонтировать/модернизировать, "права микроскопа" будут нарушены ? … Да ты что, хочешь меня надурить что ли? Ты зачем оптимизации поотключал? … Даю встречный вопрос: Да ты что, хочешь меня надурить что ли? Ты зачем оптимизации повключал? (Порылся в "хламе"). Древняя "шпора" (аж от 25.12.1998г) чой-то там глаголит: при cdecl-е иногда может понадобиться отключить оптимизеры (речь только про главную стр., так что все "дополнительные" (наверное) можешь повключать). И как раз "базариться" что это может понадобиться в циклах. (Глубже тогда не изучал, да и щас неохота). Вот с тех пор и до 09.01.2018 мне ни разу "это" не понадобилось (пока кое-кому не взбрело лимон раз фуню вызвать). … Дал … Как найти указатель в запущенной *.exe на модуль, который хз как называется, но в котором имеется публичная фуня по имени Moj_Funj из объектной DLL-ки, подключенной к этому-же *.exe ? Я получил ответ на этот вопрос ??? № поста пжлста. Добавлено через 1 час 10 минут Кстати "Дельное" предложение поступило с "местного" уровня: Не "ломать" старые указатели на "родные" фуни. А дописать столько же новых, но указывающих на "шапочки". "Обозвать" их с каким-нибудь префиксом/постфиксом (как API, A-фуни, W-фуни). Мало ли взбредёт из двух "модулей" на разных языках вызывать одно и то-же.
0
|
Модератор
|
|
26.01.2018, 12:00 | 60 |
Мешает
Процетируй Ересь. Что значит "влезають туда мои зени"? VB6 прекрасно вызывает cdecl функции "из коробки" через TLB. Они там по умолчанию включены если что. Второй вопрос - много ли ты видел программ скомпилированных без оптимизаций? Кому нужна медленная неэффективная программа? Третий вопрос - я могу тебе сейчас продемонстрировать контрпример где и без оптимизаций это не будет работать. Когда говорят что и "так работает", значит это работает всегда, так почему тогда это не работает в моих вышеприведенных примерах? Вот я скинул примеры в которых это работает именно всегда, без разницы включил ты оптимизации или нет, вызываешь ли ты в цикле или нет. Вот я скинул другой пример, где вызов cdecl функции вызывает некорректную работу (на некоторых машинах может быть креш), несмотря на то включил ты оптимизации или нет. Ересь, то откуда ты это взял - полная чепуха. Ты тему перечитай, авось придет просветление. Вопрос был: Ответ - #14
0
|
26.01.2018, 12:00 | |
26.01.2018, 12:00 | |
Помогаю со студенческими работами здесь
60
string в char* для вызова функции из dll Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова? нужно чтобы функция располагалась до ее вызова, после ее вызова и в другом файле. Как это сделать? Не понятно, как сделать аннотации для вызова Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает. Сделать класс с статическими элементами для подсчета вызова функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |