Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual C++ / MFC / WTL > Dll |
Автор: kl 19.02.02, 15:08 |
Привет! Тут такая проблема, пишу так: FILE* file = fopen (filename, "r"); ... func(file); ... Где-то в DLL void func(FILE* source); { ...int x = fgetc(source);// на этом месте Access Violation } Функция объявлена так: extern "C" __declspec(dllimport) void func(FILE* source) // в ехе-шнике В чем дело? Если func находится в ехе то все ОК, значение указателя при передаче не меняется... Спасибо. |
Автор: zAg 19.02.02, 18:15 |
Возможно что dll и exe используют разные варианты CRT (проверь опции) и вообще, при использовании CRT желательно чтобы все операции по созданию объектов, работе с ними и удалению находились в одном модуле. т.е. лучше сделать так: Где-то в DLL void func( const char *filename ) { FILE* file = fopen (filename, "r"); ... fclose (file); } вариант 2: в DLL делаешь простой класс, типа того: class CFileWork{ FILE *file; public: void Open(const char *filename){ file = fopen (filename, "r"); } void Close(){ fclose(file); } void Func();//твоя функция } в этом случае все функции все обращения к CRT расположены в одном модуле и проблем быть не должно. ps. Не знаю как в VC но в билдере даже при одинаковых параметрах CRT нельзя вызывать malloc и free в разных модулях, приходилось делать подобную конструкцию. |
Автор: Codemaster 20.02.02, 02:38 |
Может, лучше работать с Win32 API файловыми функциями, принимающими Handle? Тогда траблов точно не будет! |