![]() |
|
![]() ![]() ![]() |
|
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всем привет.
У себя в программе хочу вынести большую функцию в dll. В неё нужно передать указатель на структуру и на вектор структур. Как это правильно сделать. Выглядит она так:
Вроде всё скомпилировалось. А вот при вызове функции из библиотеки, пишет "Access violetion .....". Скорее всего я что-то не так делаю ![]() Подскажите. Спасибо. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
"Access violetion at address 00000000. Read of address 00000000." -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
GetProcAddress вернул нуль. Исправляй ошибки:
Если ошибка повторится, смотри таблицу экспорта dll. И будь готов к тому, что если будешь пользоваться разными компиляторами для exe и dll, или будешь использовать статическую RTL, вектор будет вызывать ошибки. Объекты лучше не выносить за пределы модуля. |
||||
|
|||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
На строке:
Пишет: [C++ Error] openfile.cpp(29): E2337 Only one of a set of overloaded functions can be "C" А если написать:
то всё нормально. Но ошибка всё равно возникает. Так я же и не выношу, а передаю указатель. Или нет? При создании dll в коментариях пишут о том, что если я использую переменные типа String или своего типа, то нужно подключить MEMMGR.LIB и тащить за собой borlndmm.dll. Я так и сделал, но ничего не изменилось. Это сообщение отредактировал(а) artsb - 17.5.2008, 17:11 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
Dll и Exe имеют вроде как разные сегменты данных, поэтому сомневаюсь, что твой переданный указатель будет валидным внутри библиотеки...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Это конфликт с паскалевской функцией OpenFile. В Си нельзя перегружать функции. Можешь использовать extern "с++", но имя этой функции в таблице экспорта будет немного другое. Или назови функцию по другому. Объект изменяешь? Память будет перевыделяться, и произойдёт ошибка (если менеджер памяти у каждого модуля свой). У компиляторов реализация STL может быть разная... Это сообщение отредактировал(а) 586 - 17.5.2008, 17:27 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Как тогда быть? Я и забыл. Переименую. Так как лучше посупить? Добавлено через 13 минут и 51 секунду Вот я балбес (только сильно не смейтесь ![]() Загружаю одну библиотеку, а хочу использовать функцию из другой. Во всём виновата технология "Copy-Paste". Скопировать скопировал, а название библиотеки не изменил (я сегодня ещё ону библиотеку сделал). Спасибо всем за участие! Спасибо что так оперативно отвечаете! -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |