вызов функции из 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); в Данной ДЛЛ.
Если же Реализацию содержимого ДЛЛ кинуть в само приложение (т.е. БЕЗ исп. длл), то все ОТЛИЧНО работает.
ЧТО ДЕЛАТЬ ?
если без DLL все отлично работает, так может быть дело как раз в памяти , точнее в том, что DLL получила ссылку, но память никто не выделил . Ссылка не выделяет памяти.
Тут именно какие-то Траблы по вызову функции или выделению памяти, если код в DLL откомпилирован. Если компилю как APP, то все на УРА работает. Собственно я КОД и перенес из своего приложения в DLL. Но тут ТАКАЯ засада :(.
где Data - это адресс в памяти. (внутренние функции DLL общаются между собой с помощью ссылок на выл\деленную память (ПО другому никак, данные уникального типа))
просто поток сознания (по русски называется - бред, но не хотелось бы обижать топикстартера) - по этому назовем это поток сознания :)
Вопрос первый - вот это процитированное - что имеется ввиду - у меня как минимум два варианта - первый память выделяется в длл для глобального объекта, доступного во всей длл. Второй - выделяется область shared-памяти - т.е. область адресов доступная для записи/чтения всем (или некоторым) потокам данного процесса. О чем идет речь?
Вопрос второй - если вызов функции приводит к ошибке (кстати, если вы считаете, что привести сообщение о ошибке вместо того потока сознания, который вы тут наваяли - это плохо, то вы ошибаетесь) - то логично как минимум привести фрагмент кода самой функции, и место где происходит выделение памяти под объект, который затем функции передаеться.
Data=(char*)malloc(sizeof(char)*leng); // выделение памяти под обрабатываемые данные
1. окошко "Ненормальное завершение программы"
2. инструкция по адресу **** обратилась по адресу *****,..... нельзя прочитать
Data=(char*)malloc(sizeof(char)*leng); // выделение памяти под обрабатываемые данные
1. окошко "Ненормальное завершение программы"
2. инструкция по адресу **** обратилась по адресу *****,..... нельзя прочитать
Переменная, под которую выделяется память - она видна в момент вызова функции? И, что главное, вы уверены что видна таже переменная? Ее инициализация происходит в том же модуле длл?
Как я писал выше, если ТОЧНО этот же код компилить как приложение ТО все работает как часы.