Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.15.63.145] |
|
Сообщ.
#1
,
|
|
|
Привет!
Тут такая проблема, пишу так: 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 находится в ехе то все ОК, значение указателя при передаче не меняется... Спасибо. |
Сообщ.
#2
,
|
|
|
Возможно что 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 в разных модулях, приходилось делать подобную конструкцию. |
Сообщ.
#3
,
|
|
|
Может, лучше работать с Win32 API файловыми функциями, принимающими Handle? Тогда траблов точно не будет!
|