Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вызов функции из DLL. -> Крах приложения. ! Хелп Срочно

8.8K
04 апреля 2008 года
EpoxDe1u
56 / / 29.09.2006
Итак есть такой код в DLL :
Код:

void shifruem(AnsiString PassEnter, AnsiString readfn, AnsiString writefn){.......
Toros(Data, leng, Ky);
.....}

где Toros(Data, leng, Ky); - функция подключаемая из другого .cpp
где Data - это адресс в памяти. (внутренние функции DLL общаются между собой с помощью ссылок на выл\деленную память (ПО другому никак, данные уникального типа))

Теперь вызов из главной:
Код:

shifruem("STELLA","t1.txt","е1.txt");


Место ошибки - Это место вызова Toros(Data, leng, Ky); в Данной ДЛЛ.

Если же Реализацию содержимого ДЛЛ кинуть в само приложение (т.е. БЕЗ исп. длл), то все ОТЛИЧНО работает.

ЧТО ДЕЛАТЬ ?
38K
05 апреля 2008 года
kingkong1
1 / / 05.04.2008
Вообще-то исходной информации маловато.

если без DLL все отлично работает, так может быть дело как раз в памяти , точнее в том, что DLL получила ссылку, но память никто не выделил . Ссылка не выделяет памяти.
8.8K
06 апреля 2008 года
EpoxDe1u
56 / / 29.09.2006
Весь код (Вызов Toros(Data, leng, Ky); и то что его вызывает расположено в DLL). В Вызывающей функции память выделяется динамически под новые объекты произвольного содержимого.

Тут именно какие-то Траблы по вызову функции или выделению памяти, если код в DLL откомпилирован. Если компилю как APP, то все на УРА работает. Собственно я КОД и перенес из своего приложения в DLL. Но тут ТАКАЯ засада :(.
1
06 апреля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: EpoxDe1u

где Data - это адресс в памяти. (внутренние функции DLL общаются между собой с помощью ссылок на выл\деленную память (ПО другому никак, данные уникального типа))


просто поток сознания (по русски называется - бред, но не хотелось бы обижать топикстартера) - по этому назовем это поток сознания :)
Вопрос первый - вот это процитированное - что имеется ввиду - у меня как минимум два варианта - первый память выделяется в длл для глобального объекта, доступного во всей длл. Второй - выделяется область shared-памяти - т.е. область адресов доступная для записи/чтения всем (или некоторым) потокам данного процесса. О чем идет речь?
Вопрос второй - если вызов функции приводит к ошибке (кстати, если вы считаете, что привести сообщение о ошибке вместо того потока сознания, который вы тут наваяли - это плохо, то вы ошибаетесь) - то логично как минимум привести фрагмент кода самой функции, и место где происходит выделение памяти под объект, который затем функции передаеться.

8.8K
07 апреля 2008 года
EpoxDe1u
56 / / 29.09.2006
Извиняюсь, если не совсем правильно выразил свой вопрос.

Data=(char*)malloc(sizeof(char)*leng); // выделение памяти под обрабатываемые данные

1. окошко "Ненормальное завершение программы"
2. инструкция по адресу **** обратилась по адресу *****,..... нельзя прочитать
1
07 апреля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: EpoxDe1u
Извиняюсь, если не совсем правильно выразил свой вопрос.

Data=(char*)malloc(sizeof(char)*leng); // выделение памяти под обрабатываемые данные

1. окошко "Ненормальное завершение программы"
2. инструкция по адресу **** обратилась по адресу *****,..... нельзя прочитать


Переменная, под которую выделяется память - она видна в момент вызова функции? И, что главное, вы уверены что видна таже переменная? Ее инициализация происходит в том же модуле длл?

8.8K
07 апреля 2008 года
EpoxDe1u
56 / / 29.09.2006
Переменная создается и инициализируется непосредственно перед вызовом функции, в которую она передается. (все внутри одной DLL).

Как я писал выше, если ТОЧНО этот же код компилить как приложение ТО все работает как часы.
8.8K
08 апреля 2008 года
EpoxDe1u
56 / / 29.09.2006
Тема закрыта. Спс добрым людям на другом форуме.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог