Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / непонятки между libtorrent и msvc2010 / 17 сообщений из 17, страница 1 из 1
01.03.2015, 20:13
    #38891873
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
выходит ошибка 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
01.03.2015, 20:22
    #38891878
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
код конструктора для данной ситуации
Код: 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
01.03.2015, 20:27
    #38891883
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
Картежник, а вот то что туда попадает

filename " Y¬C:/1.torrent" const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
...
Рейтинг: 0 / 0
02.03.2015, 16:21
    #38892575
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
Картежниккод конструктора для данной ситуации
Код: 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
02.03.2015, 17:44
    #38892689
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
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
02.03.2015, 17:47
    #38892692
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
MasterZiv
А где ты этот суперзамечательный код взял ?

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

ну

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



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

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

ну

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



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

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

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

тогда приведи полный код примера, как запускаешь, ошибки, проблемы и прочие подробности
...
Рейтинг: 0 / 0
03.03.2015, 13:43
    #38893498
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
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
03.03.2015, 15:09
    #38893638
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
Картежникпросто запускаю не передавая никаких параметров, результат на картинке

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

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

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

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

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

пример сборки либторрента тут
...
Рейтинг: 0 / 0
03.03.2015, 21:55
    #38894096
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
автор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
03.03.2015, 22:02
    #38894099
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки между libtorrent и msvc2010
напомню в чем ошибка. в конструктор 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
Форумы / C++ [игнор отключен] [закрыт для гостей] / непонятки между libtorrent и msvc2010 / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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