powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / непонятки между libtorrent и msvc2010
17 сообщений из 17, страница 1 из 1
непонятки между libtorrent и msvc2010
    #38891873
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выходит ошибка R6010 abort() has been called.
ошибку вызывает конструктор torrent_info()
Код: plaintext
1.
2.
3.
4.
add_torrent_params p;
...
p.ti = new torrent_info("C:/1.torrent",ec);
...


начал отлаживать. заметил что в torrent_info.cpp на строке с кодом
Код: plaintext
1.
2.
3.
...
int ret = load_file(filename, buf, ec);
...


в переменную filename попадают другие символы. менял в настройках Набор символов (Юникод и многобайтовая кодировка) результат примерно одинаковый - левые символы(временами с "C:/1.torrent", а иногда и без них)
dll и lib либторрента собрал тоже в двух кодировках и проверил обе. что можно сделать ?
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38891878
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код конструктора для данной ситуации
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
torrent_info::torrent_info(std::string const& filename, error_code& ec, int flags)
		: m_merkle_first_leaf(0)
		, m_piece_hashes(0)
		, m_creation_date(0)
		, m_info_section_size(0)
		, m_multifile(false)
		, m_private(false)
		, m_i2p(false)
	{
		std::vector<char> buf;
		int ret = load_file(filename, buf, ec);
		if (ret < 0) return;

		lazy_entry e;
		if (buf.size() == 0 || lazy_bdecode(&buf[0], &buf[0] + buf.size(), e, ec) != 0)
			return;
		parse_torrent_file(e, ec, flags);

		INVARIANT_CHECK;
	}
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38891883
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник, а вот то что туда попадает

filename " Y¬C:/1.torrent" const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38892575
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежниккод конструктора для данной ситуации
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
torrent_info::torrent_info(std::string const& filename, error_code& ec, int flags)
		: m_merkle_first_leaf(0)
		, m_piece_hashes(0)
		, m_creation_date(0)
		, m_info_section_size(0)
		, m_multifile(false)
		, m_private(false)
		, m_i2p(false)
	{
		std::vector<char> buf;
		int ret = load_file(filename, buf, ec);
		if (ret < 0) return;

		lazy_entry e;
		if (buf.size() == 0 || lazy_bdecode(&buf[0], &buf[0] + buf.size(), e, ec) != 0)
			return;
		parse_torrent_file(e, ec, flags);

		INVARIANT_CHECK;
	}



А где ты этот суперзамечательный код взял ?

P.S. Ведь сколько раз твердили миру... Конструкторы -- для инициализации, а не для каких-то действий.
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38892689
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
А где ты этот суперзамечательный код взял ?

P.S. Ведь сколько раз твердили миру... Конструкторы -- для инициализации, а не для каких-то действий.

это из примера
Код: 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.
40.
41.
42.
43.
44.
#include <stdlib.h>
#include "libtorrent/entry.hpp"
#include "libtorrent/bencode.hpp"
#include "libtorrent/session.hpp"

int main(int argc, char* argv[])
{
	using namespace libtorrent;

	if (argc != 2)
	{
		fputs("usage: ./simple_client torrent-file\n"
			"to stop the client, press return.\n", stderr);
		return 1;
	}

	session s;
	error_code ec;
	s.listen_on(std::make_pair(6881, 6889), ec);
	if (ec)
	{
		fprintf(stderr, "failed to open listen socket: %s\n", ec.message().c_str());
		return 1;
	}
	add_torrent_params p;
	p.save_path = "./";
	p.ti = new torrent_info(argv[1], ec);
	if (ec)
	{
		fprintf(stderr, "%s\n", ec.message().c_str());
		return 1;
	}
	s.add_torrent(p, ec);
	if (ec)
	{
		fprintf(stderr, "%s\n", ec.message().c_str());
		return 1;
	}

	// wait for the user to end
	char a;
	scanf("%c\n", &a);
	return 0;
}
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38892692
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
А где ты этот суперзамечательный код взял ?

P.S. Ведь сколько раз твердили миру... Конструкторы -- для инициализации, а не для каких-то действий.
а код конструктора в исходниках libtorrent через отладчик перешел на этот код
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38893030
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник,

ну

Код: plaintext
1.
new torrent_info(argv[1], ec);



строка эта приходит из параметра коммандной строки, в винде это может вызывать дополнительные проблемы -- в винде она
должна быть в т.н. OEM-кодировке (т.е. в cp866 для руской винды), и тебе нужно её переводить сначала в cp1251, потом в
уже ту кодировку, в которой работает библиотека и в которой она вызывает функции WIN API.

забей туда для примера в виде литерала какую-то фиксированную строку для имени файла и попробуй так.
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38893074
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКартежник,

ну

Код: plaintext
1.
new torrent_info(argv[1], ec);



строка эта приходит из параметра коммандной строки, в винде это может вызывать дополнительные проблемы -- в винде она
должна быть в т.н. OEM-кодировке (т.е. в cp866 для руской винды), и тебе нужно её переводить сначала в cp1251, потом в
уже ту кодировку, в которой работает библиотека и в которой она вызывает функции WIN API.

забей туда для примера в виде литерала какую-то фиксированную строку для имени файла и попробуй так.

да я по разному пробовал, какие то левые символы еще попадают. значит надо искать другой вариант инициализации и загрузки имени файла.
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38893096
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник,

тогда приведи полный код примера, как запускаешь, ошибки, проблемы и прочие подробности
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38893498
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКартежник,

тогда приведи полный код примера, как запускаешь, ошибки, проблемы и прочие подробности

Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
// fortorrent.cpp: определяет точку входа для консольного приложения.


#include "stdafx.h"
#include <stdlib.h>

#include <iostream>
#include <fstream>
#include <iterator>
#include <exception>

#include <boost/format.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>


#include <libtorrent/session.hpp>

#include <boost/asio/impl/src.hpp>
#include "libtorrent/entry.hpp"
#include "libtorrent/bencode.hpp"
#include <string.h>


#pragma comment(lib,"libtorrent.lib")

using namespace libtorrent;

int _tmain(int argc,char* argv[])
//int _tmain(int argc, _TCHAR argv[])
{ 
	//boost::asio::io_service io_service;
	printf("Hello\n");
	/*if (argc != 2) //отключил, потому что название файла задаю в коде
  {
    fputs("usage: ./simple_client torrent-file\n"
      "to stop the client, press return.\n", stderr);
   // return 1;
  }*/
	session s;
	error_code ec;
	fprintf(stderr,"begin...\n");
	s.listen_on(std::make_pair(6881,6889),ec);
	if(ec){
		fprintf(stderr,"failed to open listen socket: %s\n",ec.message().c_str());
		//return 1;
	}
	else{
	//	fprintf(stderr,"listen...%s\n",argv[1]);
	}
	add_torrent_params p;
	p.save_path="./";
	//char *tor="C:\\1.torrent";
	std::string const tor="c:\\1.torrent";
		fprintf(stderr,"torrent...%s\n",tor.c_str());
		p.ti = new torrent_info("c:\\1.torrent",ec);
	//	p.ti = new torrent_info(tor.c_str(),ec);
		
	//p.ti=new torrent_info(argv[1],ec);
	if(ec){
		fprintf(stderr,"%s\n",ec.message().c_str());
		//return 1;
	}
	else{
	//	fprintf(stderr,"new torrent %s\n",argv[1]);
	}
	s.add_torrent(p,ec);
	if(ec){
		fprintf(stderr,"%s\n",ec.message().c_str());
		//return 1;
	}
	else{
		fprintf(stderr,"torrent added\n");
	}
	char a;
	scanf("%c\n",a);
	system("PAUSE");
	return 0;
}


просто запускаю не передавая никаких параметров, результат на картинке
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38893638
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежникпросто запускаю не передавая никаких параметров, результат на картинке

Так там обязателен первый параметр -- имя файла с торрентом.
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894087
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКартежникпросто запускаю не передавая никаких параметров, результат на картинке

Так там обязателен первый параметр -- имя файла с торрентом.

это я тоже делал результат такой же. а щас параметр не нужен я закомментил проверку параметров и ихиспользование
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894090
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежникрезультат на картинкеа чем у тебя libtorrent твой собран? и сборка релизная, небось? ничего нет удивительного, что оно упало ))
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894092
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychКартежникрезультат на картинкеа чем у тебя libtorrent твой собран? и сборка релизная, небось? ничего нет удивительного, что оно упало ))

либторрент сам собрал по примеру .ничего не менял в исходниках. boost готовый собранный с офсайта
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894093
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежникegorychпропущено...
а чем у тебя libtorrent твой собран? и сборка релизная, небось? ничего нет удивительного, что оно упало ))

либторрент сам собрал по примеру .ничего не менял в исходниках. boost готовый собранный с офсайта

пример сборки либторрента тут
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894096
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAdd the followings to Preprocessor Definitions under C/C++->Preprocessor property page.
WIN32
WIN32_LEAN_AND_MEAN
_WIN32_WINNT=0x0500
_CRT_SECURE_NO_DEPRECATE
UNICODE
BOOST_ASIO_HASH_MAP_BUCKETS=1021
BOOST_FILESYSTEM_VERSION=2
WITH_SHIPPED_GEOIP_H
TORRENT_BUILDING_SHARED
BOOST_ASIO_SEPARATE_COMPILATION
BOOST_ASIO_ENABLE_CANCELIO
TORRENT_USE_TOMMATH
может надо здесь убрать что нить, например юникод. или что то из этого добавить в сам проект который загружает либторрент
...
Рейтинг: 0 / 0
непонятки между libtorrent и msvc2010
    #38894099
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напомню в чем ошибка. в конструктор torrent_info() в параметр filename (std::string const&) передаю c:/1.torrent(или c:\\1.torrent или 1.torrent) во время отладки, внутри конструктора, выполняя
Код: plaintext
1.
int ret = load_file(filename, buf, ec);


filename равен " Y¬C:/1.torrent" или " Y¬"
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / непонятки между libtorrent и msvc2010
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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