![]() |
|
|
![]()
|
|
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
пробовал, выдает:
-------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
объявлялась в dll как Test.
но пробовал по всякому(и с маленькой и с большой буквы), не помогает -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
осталось только __stdcall воткнуть в обявление Test'а этого...
|
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Уже лучше, компилится проект стал. При запуске выдает, что нет определенной dll, нужной для работы вызываемой dll, "повторный запуск приложения исправит эту проблему".
Незнаю, кто писал эту Dll всем спасибо -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Lotrex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Не спеши расстраиваться, это решаемая проблема. :-)
счас напишу ответ. |
|||
|
||||
| Lotrex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Все дело в том, что C++ Builder и MSVC (черт бы побрал их обоих :-)) по разному
понимают слова __stdcall и __cdecl. То есть объявления и тут и там одинаковые, а после компиляции получается совсем разное (я уж не говорю про ситуацию, кагда в начале опущено extern "C" ) Вот такое объявление функции: extern "C" __declspec(dllexport) int __stdcall Test(const char *); после компиляции Builde-ром версии 5.0 никак не изменит исходное имя функции - в объектном файле так и будет сидеть Test то же самое объявление после компиляции MSVC 6.0 у меня дало в объектном файле _Test. Какой напрашивается выход? Если функция в исходнике DLL-ки объявлена например как extern "C" __declspec(dllexport) int __stdcall Test(const char *); то в заголовочном файле, который будет для Builde-ра надо написать то же имя функции, но с черточкой впереди: extern "C" __declspec(dllexport) int __stdcall _Test(const char *); После этого все фурыкает без проблем, даже если в функции не один параметр, а несколько. Разумеется, все это работает тока в том случае, если Вы сделали .lib файл с помощью implib и вставили его (этот .lib-файл) в Ваш проект. Вот мои художества: Этот файл компилился в MSVC 6.0 как dll:
Это тексты заголовочного файла и тестовой проги в Builde-ре:
|
||||
|
|||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Мдя, смотрел исходники... они изрядно удивили меня
они там объявляются без всяких extern "C" или __declspec(dllexport) или __stdcall вот кусок кода заголовочного файла:
Писалось на MSVC 6.0. Вот и думаю, либо пересобрать DLL заново только по нормальному объявлять функции, либо напрямую использовать свои функции в проекте. Кстати, если выполнить команду impdef Test.def Test.dll то в файле Test.def, можно увидеть название всех функций без всяких подчеркиваний -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Lotrex |
|
||||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Приведенный мной текст dll-ки после компиляции и выполнения команды impdef testdll.def testdll.dll дает такой результат(содержимое файла testdll.def):
Странно, что у Вас нет подчеркиваний... Или у нас объявления отличаются... А может, дело в ключах компилятора MSVC? У меня был следующий набор ключей: /nologo /MTd /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TESTDLL_EXPORTS" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
Если не использовать extern "C" то компилятор С++ будет модифицировать имена функций как взбрело в голову создателю данного компилятора. И подключить такую dll, если она скомпилирована на MSVC, к проге на C++ Builder вряд ли возможно. Я изменил приведенный мной выше текст dll-ки следующим образом(убрал extern "C"):
После компиляции в MSVC 6.0 и после компиляции и выполнения команды impdef testdll.def testdll.dll получается такой результат:
Так что я думаю, что Вам надо перед всеми функциями поставить новые объявления, например так:
Это сообщение отредактировал(а) Lotrex - 8.2.2007, 09:16 |
||||||||||||||
|
|||||||||||||||
| Bima |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
вот что я получил после команды impdef test.def test.dll:
какие команды были при компиляции я не знаю
поставлю MSVC и попробую -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
||||
|
|||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
MSVC может обходится без __declspec(dllexport), по-скольку у него есть возможность просто задать имена функция, которые будут экпортироваться, в def -файле с помощью ключевого слова EXPORT
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |