Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 25.10.2013, 11:51   #1
CHERTS
Новичок
 
Регистрация: 16.10.2009
Сообщений: 2
Репутация: 10
По умолчанию Ошибка при использовании 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 Кб, 0 просмотров)

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

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

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


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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка (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


16:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru