powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста, скомпилируйте dll
23 сообщений из 23, страница 1 из 1
Пожалуйста, скомпилируйте dll
    #35251526
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

У кого есть хоть чуть-чуть времени, скомпилируйте 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
Пожалуйста, скомпилируйте dll
    #35251541
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проэкт в прикрепленном файле.
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35251737
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
держите
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35257377
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Пожалуйста, скомпилируйте dll
    #35257380
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот новый проэкт
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35260545
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35260549
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это с динамическим буфером

Код: 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
Пожалуйста, скомпилируйте dll
    #35260552
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс удалить буффер забыл удалить.

Код: 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
Пожалуйста, скомпилируйте dll
    #35261325
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.. странно

Почемуто длина страссированого скрипта всего лишь 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
Пожалуйста, скомпилируйте dll
    #35263386
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этовам надо студию ставить и отладчиком подклюаться что там твориться
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35265772
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пологаую это 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
Пожалуйста, скомпилируйте dll
    #35265785
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы меня простите за наглость, скомпилируйте dll плииз.
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35270125
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35281390
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-равно режет скрипт, ну гад :(
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35329411
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте сделать тестовый пример я посмотрю в отладчике
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35331937
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsikпопробуйте сделать тестовый пример я посмотрю в отладчике
Не понял. В каком смысле - тестовый пример.
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35334242
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имея одну dll я не смогу в отладчике просмотреть результате
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35348569
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsikимея одну dll я не смогу в отладчике просмотреть результате
Если для примера взять MS Access ODBC - будет нормально? он у Вас есть?
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35355506
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разумеется есть. Нужда база в акцесс, и тестировачная программа использующая вашу трасировочную dll. Разумеется мне не хотелось бы тратить много своего времени на то что к делу не относится.
...
Рейтинг: 0 / 0
Пожалуйста, скомпилируйте dll
    #35360816
Бунаков Михаил Петрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Lepsik
Сейчас это проэкт очень сильно муссиреться вашими колегами из Belgium.
Вот можите ознакомиться
http://www.codeproject.com/KB/trace/tracetool.aspx

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


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