Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2013, 11:51   #1
CHERTS
Новичок
Джуниор
 
Регистрация: 16.10.2009
Сообщений: 2
По умолчанию Ошибка при использовании vfprintf в dll при stdout

Добрый день уважаемые коллеги, есть проблема, не могу её решить.

Пишу программу в Visual Studio 2010
Упростим задачу до минимума:
Есть dll с 2 экспортируемыми функциями:

Код:
extern "C" __declspec(dllexport) void WriteMyText1(FILE *stream, char *format, ...)
{
		va_list args;
		va_start(args, format);
		vfprintf(stream, format, args);
		va_end(args);
}

extern "C" __declspec(dllexport) void WriteMyText2(char *format, ...)
{
	va_list args;
	va_start(args, format);
	vprintf(format, args);
	va_end(args);
}

все собирается без проблем

есть тестовая программа, которая использует эту dll, в ней всего 2 вызова:

Код:
	WriteMyText2("%s", "hello world 1");

	WriteMyText1(stdout, "%s", "hello world 2");

первый вызов функции отрабатывает и на экран выводится hello world 1
при вызове WriteMyText1 вылетает экзепшн и приехали
разница только в использовании vfprintf или vprintf

вопрос, почему вылетает этот экзепшн? почему при вызове vfprintf(stream, format, args) из dll туда не передается указатель на stdout ?

Причем если мы вызываем локальную функцию с vfprintf(stream, format, args) и передаем в неё первым параметром stdout, проблем нет. Ошибка именно если передаем stdout в функцию из dll. В принципе не важно передавать stdout или указатель на файл (fp = fopen("file.txt","w")), ошибка такая же.

Если линковать библиотеку к проекту статически, то такой ошибки нет, а если динамически (dll) то возникает беда.

Я уже облазил пол инета и не могу понять в чем беда, подскажите плиз.

Во вложении готовый проект.
Вложения
Тип файла: rar STDOUT_DLL_TEST.rar (7.5 Кб, 5 просмотров)

Последний раз редактировалось CHERTS; 25.10.2013 в 14:37.
CHERTS вне форума Ответить с цитированием
Старый 25.10.2013, 15:18   #2
CHERTS
Новичок
Джуниор
 
Регистрация: 16.10.2009
Сообщений: 2
По умолчанию

Проблема решена!

Project Properties > Configuration Properties > C/C++ > Code Generation > Runtime Library
Basic Runtime Check = Default


и все работает!
CHERTS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка (error code 0) при использовании libmysql.dll kr00t БД в Delphi 4 28.04.2011 15:58
вылетает программа при использовании dll radiohobbyt Win Api 2 25.04.2011 11:39
ошибка dcc70.dll при использовании AnsiUpperCase hello88 Общие вопросы Delphi 8 13.07.2010 16:05
Access violation at address при использовании DLL spamer Общие вопросы Delphi 4 27.08.2009 22:19