Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Привет всем.

У кого есть хоть чуть-чуть времени, скомпилируйте dll, пожалуйста.

Ваша помощь способна решить проблему обсуждаемая на топиках
https://www.sql.ru/forum/actualthread.aspx?tid=163419
https://www.sql.ru/forum/actualthread.aspx?tid=537352
https://www.sql.ru/forum/actualthread.aspx?tid=317053

Эту (скомпилированную) dll - ODBCTrac.dll можно заменить вместо стандартного odbctrac.dll. И позволит расширить возможности трасировки ODBC драйверов.

Проэкт для ODBCTrac.dll взят от сюда
http://www.codeproject.com/KB/database/ODBCTracer.aspx
12 апр 08, 19:56    [5538375]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Проэкт в прикрепленном файле.

К сообщению приложен файл (ODBCTracer.zip - 44Kb) cкачать
12 апр 08, 20:19    [5538404]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
держите

К сообщению приложен файл (ODBCTracer.zip - 41Kb) cкачать
13 апр 08, 04:32    [5539018]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Lepsik
держите

Спасибо. Получилось. Правда полученная dll запросила еще sxlrt308.dll, но я его закинул в System32 и все заработало.

Прошу Вас еще раз скомпилировать dll.

Разработчики заложили маленький размер буфера в который записывается страсиррованный скрипт.
Я изменил файл odbctracedump.cpp проекта ODBCTrac.dll, а именно функцию void ODBCTraceArg(ODBCTraceCall *call, int argnumber)

был фрагмент
case TYP_SQLWCHAR_PTR:
{
	if (arg->value)
	{
		char buffer[256];wcstombs(buffer, (SQLWCHAR*)arg->value, sizeof(buffer));
		ODBCTraceDump("\t\t\t%s\t%s\t%s\r\n", arg->name.c_str(), TracerType2SQLType(arg->type), buffer);
	}
	else
		ODBCTraceDump("\t\t\t%s\t%s\tNullpointer\r\n", arg->name.c_str(), TracerType2SQLType(arg->type));
	break;
}

изменил на
case TYP_SQLWCHAR_PTR:
{
	if (arg->value)
	{
		char buffer[5120];wcstombs(buffer, (SQLWCHAR*)arg->value, sizeof(buffer));
		ODBCTraceDump("\t\t\t%s\t%s\t%s\r\n", arg->name.c_str(), TracerType2SQLType(arg->type), buffer);
	}
	else
		ODBCTraceDump("\t\t\t%s\t%s\tNullpointer\r\n", arg->name.c_str(), TracerType2SQLType(arg->type));
	break;
}
Вообщето, по правильному, нужно чтобы размер для char buffer[] был равен (или больше на 1 для верности) размеру (SQLWCHAR*)arg->value. (я просто не знаю как в С++ это сделать)
15 апр 08, 21:03    [5551259]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Вот новый проэкт

К сообщению приложен файл (ODBCTracer_src.rar - 46Kb) cкачать
15 апр 08, 21:04    [5551266]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
еще раз

К сообщению приложен файл (ODBCTracer.zip - 41Kb) cкачать
17 апр 08, 04:51    [5558499]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
это с динамическим буфером

			const size_t lnbuf = wcslen((SQLWCHAR*)arg->value);
			char *buffer = new char[ lnbuf + 1 ];
			wcstombs( buffer, (SQLWCHAR*)arg->value, lnbuf );
			buffer[ lnbuf ] = '\0';


К сообщению приложен файл (ODBCTracer2.zip - 41Kb) cкачать
17 апр 08, 04:59    [5558503]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
упс удалить буффер забыл удалить.

		if (arg->value)
		{
			const size_t lnbuf = wcslen((SQLWCHAR*)arg->value);
			char *buffer = new char[ lnbuf + 1 ];
			wcstombs( buffer, (SQLWCHAR*)arg->value, lnbuf );
			buffer[ lnbuf ] = '\0';

			ODBCTraceDump("\t\t\t%s\t%s\t%s\r\n", arg->name.c_str(), TracerType2SQLType(arg->type), buffer);

			delete [] buffer;
		}


К сообщению приложен файл (ODBCTracer3.zip - 41Kb) cкачать
17 апр 08, 05:02    [5558506]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Хм.. странно

Почемуто длина страссированого скрипта всего лишь 1001 символов. Как в dll с фиксированным буфером 5120 так и в dll с динамическим буфером. (Это конечно больше чем 256 символов - которые трассировались еще в первых версиях проекта. Но это мало. Стандартная MS odbctrace.dll дает ито большую длину скрипта!!!)

Я, так понимаю, что возможное обрезания скрипта в функции wcstombs или ODBCTraceDump

Вот пример страссированого скрипта
-------------------------------------------------------------------------------------------------
tof	3120-3160	ENTER	SQLExecDirectW
			hstmt	SQLHSTMT	0x018e19d0
			szSqlStr	SQLWCHAR*	select distinct axl_long_tex.tex_text axle_long_des,
					 axl_description,
					 axl_mod_id,
					 ahi_sort,
					 ahi_uss_id,
					 ahi_axl_id,
					 mod_tex.tex_text Model,
					 mfa_id,
					 mfa_brand Manufacturer,
					 0 dummy
	 		  from tof_axles_histories
	 		  join tof_axles
				 on axl_id = ahi_axl_id and
					 axl_la_ctm subrange(144 cast integer) = 1
			  join tof_country_designations axl_long_des
				 on axl_long_des.cds_id = axl_mma_cds_id and
					 axl_long_des.cds_ctm subrange(144 cast integer) = 1 and
					 axl_long_des.cds_lng_id in (16, 255)
			  join tof_des_texts axl_long_tex
				 on axl_long_tex.tex_id = axl_long_des.cds_tex_id
	 		  join tof_models
				 on mod_id = axl_mod_id
            and mod_axl = 1
			  join tof_country_designations mod_cds
				 on mod_cds.cds_id = mod_cds_id and
					 mod_cds.cds_ctm subrange(144 cast integer) = 1 and
					 mod_cds.cds_lng_id in (16, 255)
			  join tof_des_texts mod_tex
				 on mod_tex.tex_id = m			cbSqlStr	SQLINTEGER	-3
17 апр 08, 11:55    [5559897]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
этовам надо студию ставить и отладчиком подклюаться что там твориться
18 апр 08, 07:19    [5564306]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Пологаую это ODBCTraceDump в odbctracedump.cpp

Смотрите вот функция вывода скрипта
void ODBCTraceDump(const char *text, ...)
{
	char buffer[MAX_BUFFER_CONVERT];  

	va_list args;          
	va_start(args, text); 

	int length = _vsnprintf(buffer, MAX_BUFFER_CONVERT - 1, text, args);  

	va_end(args);  

	//Console output
	ODBCTraceDialog::getUniqueInstance()->appendText(buffer);

	//File output
	if (ODBCTraceOptions::getUniqueInstance()->fileloggingactivated)
	{
		//open file for writing. obviosly, there are faster ways for that, but I want to
		//be able to delete the file while the odbctracer is running...
		FILE *file = fopen(ODBCTraceOptions::getUniqueInstance()->logfile.c_str(), "a");
		if (file)
		{
			char logtime[64];_strtime(logtime);
			fprintf(file, "%s\t%s", logtime, buffer);
			fclose(file);
		}
	}
}

А константа определна вот так.
#define MAX_BUFFER_CONVERT 1024

Бред, конечно. Зачем было обрезать страссированный скрипт в двух местах
1. в функции void ODBCTraceArg(ODBCTraceCall *call, int argnumber) - это путем char buffer[256];
2. а затем еще передать результат в void ODBCTraceDump(const char *text, ...) и тут горантировать обрезание скрипта с помощью #define MAX_BUFFER_CONVERT 1024

Вот ребята подсказали от сюда. Давайте попробуем переделать.
void ODBCTraceDump(const char *text, ...)
{
	// Указатель на выходной буфер.
	char *buffer;  

	va_list args;          
	va_start(args, text); 

	// Узнаем размер результирующей строки.
	size_t length = _vsnprintf(NULL,0x00, text, args);  

	// Выделим буфер необходимого размера, не забыв про нуль терминатор.
	buffer=new char[length+0x01];

	// Форматнем строку
	_vsnprintf(buffer, length, text, args);

	va_end(args);  

	//Console output
	ODBCTraceDialog::getUniqueInstance()->appendText(buffer);

	//File output
	if (ODBCTraceOptions::getUniqueInstance()->fileloggingactivated)
	{
		//open file for writing. obviosly, there are faster ways for that, but I want to
		//be able to delete the file while the odbctracer is running...
		FILE *file = fopen(ODBCTraceOptions::getUniqueInstance()->logfile.c_str(), "a");
		if (file)
		{
			char logtime[64];_strtime(logtime);
			fprintf(file, "%s\t%s", logtime, buffer);
			fclose(file);
		}
	}

    // Удалим буфер.
    delete [] buffer;
}

Ну вот и все. Должно сработать.
18 апр 08, 20:02    [5568701]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Вы меня простите за наглость, скомпилируйте dll плииз.

К сообщению приложен файл (ODBCTracer_src_4.rar - 50Kb) cкачать
18 апр 08, 20:13    [5568721]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
тут

К сообщению приложен файл (ODBCTracer4.zip - 41Kb) cкачать
22 апр 08, 08:36    [5577543]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Все-равно режет скрипт, ну гад :(
26 апр 08, 12:38    [5599770]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
попробуйте сделать тестовый пример я посмотрю в отладчике
22 май 08, 17:31    [5702099]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Lepsik
попробуйте сделать тестовый пример я посмотрю в отладчике

Не понял. В каком смысле - тестовый пример.
23 май 08, 16:34    [5707964]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
имея одну dll я не смогу в отладчике просмотреть результате
26 май 08, 06:50    [5713131]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Lepsik
имея одну dll я не смогу в отладчике просмотреть результате

Если для примера взять MS Access ODBC - будет нормально? он у Вас есть?
2 июн 08, 11:47    [5745895]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
разумеется есть. Нужда база в акцесс, и тестировачная программа использующая вашу трасировочную dll. Разумеется мне не хотелось бы тратить много своего времени на то что к делу не относится.
5 июн 08, 06:17    [5762009]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
для Lepsik
Сейчас это проэкт очень сильно муссиреться вашими колегами из Belgium.
Вот можите ознакомиться
http://www.codeproject.com/KB/trace/tracetool.aspx

Сама dll обсуждаеться в топике Is ODBCTracer project included (plugged) In Your project?.
6 июн 08, 21:55    [5773531]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Вот накалял.
В файле readme - описано какой должен быть альяс.
БлХ я не могу загрузить сюда тестовый проэкт.
6 июн 08, 22:36    [5773612]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, скомпилируйте dll  [new]
Бунаков Михаил Петрович
Member

Откуда: Киев г.
Сообщений: 72
Проэкт занимает более 300 кб. А на форум можно загрузить только 100 кб файл
У меня мыло не скрыто, можете его увидеть. Могу Вам сбюросить на Ваше мыло
6 июн 08, 22:43    [5773623]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Пожалуйста, скомпилируйте dll  [new]
bzums
Member

Откуда:
Сообщений: 108
Ищу решение, как запустить это чудо.
Библиотека есть, трассировка запускается, но ничего не происходит.
В чем может быть проблема ?
Спасибо.
26 мар 21, 19:45    [22300538]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить