[/cpp]
Всем доброго времени суток!
Подскажите, в каких библиотеках расположены функции, такие как printf/getch и т.п. Мне необходимо, так уж случилось, вызвывать из программы на ассемблере данные
функции C++. Передача параметров и т.п мне не нужно. Вопрос: каким образом и из каких lib или obj в С++ линкуются данные функции...
24.09.07 04:34: Перенесено модератором из 'C/C++' — Павел Кузнецов
___>[/cpp] ___>Всем доброго времени суток! ___>Подскажите, в каких библиотеках расположены функции, такие как printf/getch и т.п. Мне необходимо, так уж случилось, вызвывать из программы на ассемблере данные ___>функции C++. Передача параметров и т.п мне не нужно. Вопрос: каким образом и из каких lib или obj в С++ линкуются данные функции...
libcmt.lib — Multithreaded, static link
msvcrt.lib — Multithreaded, dynamic link (import library for MSVCR80.DLL)
libcmtd.lib — Multithreaded, static link (debug)
msvcrtd.lib — Multithreaded, dynamic link (debug) (import library for MSVCR80D.DLL)
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, __c0d0__, Вы писали:
___>>Подскажите, в каких библиотеках расположены функции, такие как printf/getch и т.п. Мне необходимо, так уж случилось, вызвывать из программы на ассемблере данные ___>>функции C++. Передача параметров и т.п мне не нужно. Вопрос: каким образом и из каких lib или obj в С++ линкуются данные функции...
SC>libcmt.lib — Multithreaded, static link SC>msvcrt.lib — Multithreaded, dynamic link (import library for MSVCR80.DLL) SC>libcmtd.lib — Multithreaded, static link (debug) SC>msvcrtd.lib — Multithreaded, dynamic link (debug) (import library for MSVCR80D.DLL)
Sergey, я просматривал msvcrt.lib там действительно есть функция printf, ОДНАКО при вызове этой функции (printf)
путем статической линковки msvcrt.lib и динамической линковки MSVCR80.DLL, в обоих случаях появляется диалог:
Runtime error!
R6034
An application has an attempt to load the C runtime library incorrectly,
Lpease contact the application's support team for more information.
Вопрос: как корректно вызвать (хотя бы printf) из программы на ассемблере (masm32)???
Здравствуйте, __c0d0__, Вы писали: ___>Sergey, я просматривал msvcrt.lib там действительно есть функция printf, ОДНАКО при вызове этой функции (printf) ___>путем статической линковки msvcrt.lib и динамической линковки MSVCR80.DLL, в обоих случаях появляется диалог:
___> Runtime error!
___> R6034
___> An application has an attempt to load the C runtime library incorrectly,
___> Lpease contact the application's support team for more information.
___>Вопрос: как корректно вызвать (хотя бы printf) из программы на ассемблере (masm32)???
Посмотреть как корректно инициализировать crt можно в исходниках идущих с MS VC.
Так же этот код есть и mingw/cygwin
Здравствуйте, Tonal-, Вы писали:
T>Здравствуйте, __c0d0__, Вы писали: ___>>Sergey, я просматривал msvcrt.lib там действительно есть функция printf, ОДНАКО при вызове этой функции (printf) ___>>путем статической линковки msvcrt.lib и динамической линковки MSVCR80.DLL, в обоих случаях появляется диалог: T>
___>> Runtime error!
___>> R6034
___>> An application has an attempt to load the C runtime library incorrectly,
___>> Lpease contact the application's support team for more information.
T>
___>>Вопрос: как корректно вызвать (хотя бы printf) из программы на ассемблере (masm32)??? T>Посмотреть как корректно инициализировать crt можно в исходниках идущих с MS VC.
Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой...
Неужели, чтобы вызвать простую функцию! надо столько заморачиваться...
Спасибо за подсказку про инициализацию crt, буду пробовать, там по моему и функция попроще
есть, которая вызвается из printf() с параметром stdout...
Здравствуйте, __c0d0__, Вы писали:
>Подскажите, в каких библиотеках расположены функции, такие как printf/getch и т.п. Мне необходимо, так уж случилось, вызвывать из программы на ассемблере данные функции C++. Передача параметров и т.п мне не нужно. Вопрос: каким образом и из каких lib или obj в С++ линкуются данные функции...
А зачем вам функции C ран-тайма??
С рантайм он на то и С рантайм чтобы использовать его из языка С.
Может вам разумнее посмотреть на Win32 API (если все это под Windows, masm32 вроде это подразумевает)
Я имею в виду, типа, WriteConsole, ReadConsole?
Здравствуйте, bnk, Вы писали:
bnk>Может вам разумнее посмотреть на Win32 API (если все это под Windows, masm32 вроде это подразумевает) bnk>Я имею в виду, типа, WriteConsole, ReadConsole?
Спасибо, bnk, я их прекрасно знаю, однако printf() приведен для примера... Хотя даже printf()
довольно сложная функция с форматированием выводимого на консоль текста. А бывают ситуации,
когда требуется срочно в программу на асм'е вставить кусок который уже реализован на С. У
меня это бывало часто (и бывает, т.к. masm32 -- мой основной язык, и учился я именно на нем
программированию), и каждый раз приходилось реализовать эти куски кода ручками, хотя в
Линухе например проблем вообще никаких с этим не возникает... (Slackware 11).
Сам я в основном на Wind'e (работа).
Так что вопрос это ОБЩЕГО ХАРАКТЕРА, как конкретно слинковать основную программу на
ассемблере и функции из библиотек на С/C++ (от Microsoft VC).
Спасибо всем кто принимает участие в этой беседе
Может добьем все-таки до конца? До практического примера?
Sergey! Ваш пример у меня не пошел... Та же ошибка!
Здравствуйте, __c0d0__, Вы писали:
___>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться...
Я буду возражать!
Мой пример никаких диалогов не выдает.
Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, __c0d0__, Вы писали:
___>>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться... SC>Я буду возражать! SC>Мой пример никаких диалогов не выдает. SC>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Sergey я и не сомневался что Вы говорите чистую правду и У ВАС пример работает. Я использовал в коде
includeolib msvcrt.lib
все остальное делал link.exe. Программка откопилилась, а результат Вы знаете...
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, __c0d0__, Вы писали:
___>>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться... SC>Я буду возражать! SC>Мой пример никаких диалогов не выдает. SC>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Извините, не туда что ли влепил...
___>>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться... SC>Я буду возражать! SC>Мой пример никаких диалогов не выдает. SC>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Sergey я и не сомневался что Вы говорите чистую правду и У ВАС пример работает. Я использовал в коде
includeolib msvcrt.lib
все остальное делал link.exe. Программка откопилилась, а результат Вы знаете...
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, __c0d0__, Вы писали:
___>>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться... SC>Я буду возражать! SC>Мой пример никаких диалогов не выдает. SC>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Да действительно при использовании msvcrt.lib из пакета VC7 и msvcrt.dll все работает
SC>Я буду возражать! SC>Мой пример никаких диалогов не выдает. SC>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
Используя msvcrt.dll и msvcrt.lib из VC7 работает даже printf!!!
1/ Почему это не получается с msvcrt80.dll
2/ Есть ли в Windows по умолчанию msvcrt.dll (7) или она устанавливается только с VS?
у кого нет Visual Studio посмотрите! пожайлуста...
3/ КАК СЛИНКОВАТЬ ТАК, ЧТОБЫ КОД РАБОТАЛ БЕЗ ЭТОЙ DLL? Возможно ли это?
Здравствуйте, __c0d0__, Вы писали:
___>Здравствуйте, Sergey Chadov, Вы писали:
SC>>Здравствуйте, __c0d0__, Вы писали:
___>>>Буду пробовать, так как пример приведенный Sergey'ем выдает тот же саиый диалог с ошибкой... ___>>>Неужели, чтобы вызвать простую функцию! надо столько заморачиваться... SC>>Я буду возражать! SC>>Мой пример никаких диалогов не выдает. SC>>Тут дело в том, что я использовал(и тебе того же советую) msvcrt.dll, а не msvcr80.dll(которой тогда еще не было)
___>Sergey я и не сомневался что Вы говорите чистую правду и У ВАС пример работает. Я использовал в коде
___> includeolib msvcrt.lib
___>все остальное делал link.exe. Программка откопилилась, а результат Вы знаете...
___>Возможно это связано с версией VC (8)
Извините, не пойму куда мои сообщения попадают (это проверка)
___>Теперь другой вопрос:
___> 1/ Почему это не получается с msvcrt80.dll
По всей видимости майкрософт написал туда какую-то бяку
___> 2/ Есть ли в Windows по умолчанию msvcrt.dll (7) или она устанавливается только с VS?
В XP и старше точно есть, в 2000 не уверен, но по-моему тоже. В 9x точно нет, ну да и лесом их.
___> 3/ КАК СЛИНКОВАТЬ ТАК, ЧТОБЫ КОД РАБОТАЛ БЕЗ ЭТОЙ DLL? Возможно ли это?
найти старый статический рантайм, например libcmt от VS6, хотя я сам не пробовал.
Здравствуйте, Sergey Chadov, Вы писали:
___>>Теперь другой вопрос:
___>> 1/ Почему это не получается с msvcrt80.dll SC>По всей видимости майкрософт написал туда какую-то бяку
___>> 2/ Есть ли в Windows по умолчанию msvcrt.dll (7) или она устанавливается только с VS? SC>В XP и старше точно есть, в 2000 не уверен, но по-моему тоже. В 9x точно нет, ну да и лесом их.
___>> 3/ КАК СЛИНКОВАТЬ ТАК, ЧТОБЫ КОД РАБОТАЛ БЕЗ ЭТОЙ DLL? Возможно ли это? SC>найти старый статический рантайм, например libcmt от VS6, хотя я сам не пробовал.
Еще раз благодарю ВСЕХ за участие, особенно Sergey'я...
Механика ясна (Microsoft сво..., людей не любят), а я эту тему закрываю в виду ее исчерпанности...