Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста, скомпилируйте dll / 23 сообщений из 23, страница 1 из 1
12.04.2008, 19:56
    #35251526
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Привет всем.

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

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

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

Проэкт для ODBCTrac.dll взят от сюда
http://www.codeproject.com/KB/database/ODBCTracer.aspx
...
Рейтинг: 0 / 0
12.04.2008, 20:19
    #35251541
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Проэкт в прикрепленном файле.
...
Рейтинг: 0 / 0
13.04.2008, 04:32
    #35251737
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
держите
...
Рейтинг: 0 / 0
15.04.2008, 21:03
    #35257377
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Lepsikдержите
Спасибо. Получилось. Правда полученная dll запросила еще sxlrt308.dll , но я его закинул в System32 и все заработало.

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

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

был фрагмент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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;
}

изменил на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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 . (я просто не знаю как в С++ это сделать)
...
Рейтинг: 0 / 0
15.04.2008, 21:04
    #35257380
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Вот новый проэкт
...
Рейтинг: 0 / 0
17.04.2008, 04:51
    #35260545
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
еще раз
...
Рейтинг: 0 / 0
17.04.2008, 04:59
    #35260549
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
это с динамическим буфером

Код: plaintext
1.
2.
3.
			const size_t lnbuf = wcslen((SQLWCHAR*)arg->value);
			char *buffer = new char[ lnbuf +  1  ];
			wcstombs( buffer, (SQLWCHAR*)arg->value, lnbuf );
			buffer[ lnbuf ] = '\0';
...
Рейтинг: 0 / 0
17.04.2008, 05:02
    #35260552
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
упс удалить буффер забыл удалить.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		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;
		}
...
Рейтинг: 0 / 0
17.04.2008, 11:55
    #35261325
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Хм.. странно

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

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

Вот пример страссированого скрипта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
-------------------------------------------------------------------------------------------------
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 
...
Рейтинг: 0 / 0
18.04.2008, 07:19
    #35263386
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
этовам надо студию ставить и отладчиком подклюаться что там твориться
...
Рейтинг: 0 / 0
18.04.2008, 20:02
    #35265772
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Пологаую это ODBCTraceDump в odbctracedump.cpp

Смотрите вот функция вывода скрипта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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);
		}
	}
}

А константа определна вот так.
Код: plaintext
#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

Вот ребята подсказали от сюда . Давайте попробуем переделать.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
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;
}

Ну вот и все. Должно сработать.
...
Рейтинг: 0 / 0
18.04.2008, 20:13
    #35265785
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Вы меня простите за наглость, скомпилируйте dll плииз.
...
Рейтинг: 0 / 0
22.04.2008, 08:36
    #35270125
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
тут
...
Рейтинг: 0 / 0
26.04.2008, 12:38
    #35281390
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Все-равно режет скрипт, ну гад :(
...
Рейтинг: 0 / 0
22.05.2008, 17:31
    #35329411
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
попробуйте сделать тестовый пример я посмотрю в отладчике
...
Рейтинг: 0 / 0
23.05.2008, 16:34
    #35331937
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Lepsikпопробуйте сделать тестовый пример я посмотрю в отладчике
Не понял. В каком смысле - тестовый пример.
...
Рейтинг: 0 / 0
26.05.2008, 06:50
    #35334242
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
имея одну dll я не смогу в отладчике просмотреть результате
...
Рейтинг: 0 / 0
02.06.2008, 11:47
    #35348569
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Lepsikимея одну dll я не смогу в отладчике просмотреть результате
Если для примера взять MS Access ODBC - будет нормально? он у Вас есть?
...
Рейтинг: 0 / 0
05.06.2008, 06:17
    #35355506
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
разумеется есть. Нужда база в акцесс, и тестировачная программа использующая вашу трасировочную dll. Разумеется мне не хотелось бы тратить много своего времени на то что к делу не относится.
...
Рейтинг: 0 / 0
06.06.2008, 21:55
    #35360816
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
для Lepsik
Сейчас это проэкт очень сильно муссиреться вашими колегами из Belgium.
Вот можите ознакомиться
http://www.codeproject.com/KB/trace/tracetool.aspx

Сама dll обсуждаеться в топике Is ODBCTracer project included (plugged) In Your project? .
...
Рейтинг: 0 / 0
06.06.2008, 22:36
    #35360859
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Вот накалял.
В файле readme - описано какой должен быть альяс.
БлХ я не могу загрузить сюда тестовый проэкт.
...
Рейтинг: 0 / 0
06.06.2008, 22:43
    #35360867
Бунаков Михаил Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Проэкт занимает более 300 кб. А на форум можно загрузить только 100 кб файл
У меня мыло не скрыто, можете его увидеть. Могу Вам сбюросить на Ваше мыло
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.03.2021, 19:45
    #40057265
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, скомпилируйте dll
Ищу решение, как запустить это чудо.
Библиотека есть, трассировка запускается, но ничего не происходит.
В чем может быть проблема ?
Спасибо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста, скомпилируйте dll / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]