Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Использование def файла в VC. |
Автор: bass 13.8.2015, 20:54 | ||||||||
Доброго вечера уважаемые программисты. Прошу помощи по компоновке ДЛЛ в visual studio 10. Студию для проектов использую редко, так что прошу не пинать. У меня есть проект на Borland 6 . И решил я в данном проекте расширить функционал. На просторах интернета нашел вполне пригодный код на "С" под visual studio 10. В данном примере проектов штук 30-ать все исходные файлы ЕХЕ (Debug). Зашел в свойства проекта преставил что это dll, экспортировал функции. Закинул функции и нужный функционал в данные функции... И тут начались пляски с бубном.. Появились искаженные имена функций _AddCPP@16. В шестой студии от этого спасал def файл. Взял из рабочего проекта шестерки файл, поправил под существующую либу. Не чего не изменилось. В настройках компоновщика нашел где крепить данный деф, но все равно не выходит каменный цветок.
Ну и сам деф. Пробовал
Пробовал
Но всеравно _AddCPP@16 как будто не видит дефа. Думаю из-за того что проет был ехе а я его в динамическую библиотеку переставил. И ставлю релиз не компилирует lib и не может выполнить построение. Вернее компилирует и кидает в папку Debug. Перекидываю данный файл в релиз выполняет построение. Задача вообще стоит данную длл к проекту борланда подключит статически чтобы она была в ресурсах проекта. Но это второстепенная задача. За ранее огромное спасибо. |
Автор: volatile 16.8.2015, 13:19 |
ну так и пишите Add=_AddCPP@16 и еще, после @ идет не количество аргументов, а общий размер аргументов в байтах, поэтому 1, или 2, как у вас, быть врядли может, там кратно 4 |
Автор: feodorv 16.8.2015, 17:36 |
Это из-за __stdcall. А с Borland'ом иначе нельзя? |
Автор: bass 18.8.2015, 14:42 | ||
volatile Спасибо за ответ. ну так и пишите Add=_AddCPP@16 Попробую просто в 6 ой студии работала и так Add=_AddCPP и еще, после @ идет не количество аргументов, а общий размер аргументов в байтах, поэтому 1, или 2, как у вас, быть врядли может, там кратно 4 Таким образом в шестерке (Visual studio 6) определяеться порядковый номер функци. (Функция может бым экспортирована по имени и по номеру.) Это из-за __stdcall. А с Borland'ом иначе нельзя? Да именно из-за __stdcall.... Но это можно было def файлом исправить в Visual studio 6. НЕ понял суть вопроса про Borland на данный момент стоит вопрос создания библиотеки с правильными именами функций. Далее я ее статически подключю к проекту борланда. |
Автор: feodorv 18.8.2015, 21:05 |
Вы же не случайно перешли с __cdecl на __stdcall. Насколько я помню, это способ вызова функций в Borland'е по умолчанию. Просто стало интересно, нельзя ли борландовской функции каким-нибудь образом приписать __cdecl. |
Автор: Akira 19.8.2015, 01:10 |
calling convention извечный камень о который спотыкаются, оставлю это http://rsdn.ru/article/devtools/bcbdll.xml |
Автор: feodorv 19.8.2015, 02:05 | ||
Akira, спасибо за ссылку. В статье советуют совсем простой def-файл:
bass, попробуйте, может, не нужны вообще эти сложности с @. |
Автор: bass 19.8.2015, 08:17 | ||||
Доберусь завтра до рабочего места попробую. @1 я пытаюсь выставить порядковый номер функции. Как то писал на 6-ке перехват сетевого трафика. Была написана ws2_32.длл . Что с английским плохо на форуме . Экспортирующая все функции стандартной библиотеки, без порядковых номеров глючила. На данном этапе библиотеку использую я, можно и __cdecl использовать и __stdcall. Здесь уже встал спортивный интерес на 6-ке работало. На 10 ке не могу сделать. (((( Спасибо за помощь. |
Автор: Akira 20.8.2015, 00:27 | ||
Это работает. Гонял dll в обе сторы примерно в том же году в котором была написанна статья. Только не забудьте о конвертации coff => omf и omf => coff. |