Передача строковых параметров

Модераторы: DCV, Dimmy, victorst, kos, Prof1983

Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 8:09:13

При реализации AIKernel столкнулся с проблемой передачи строк в виде параметров между модулями. Есть несколько вариантов: char* (PChar), string (класс Си++), string (массив символов с указанием длины). Но строки в разных компиляторах реализованы по разному. Кроме PChar, но при использование PChar не очень удобное и могут возникать проблемы, если в строке присутствуют нулевые символы.
Поэтому я решил передачу строк реализовать так же как это сделано в GTK. А именно использовать структуру:
Код: Выделить всё
type
  AString_Type = packed record
    Str: PWideChar;
    Len: AInteger;
  end;
или
Код: Выделить всё
struct AString_Type
{
  wchar* Str;
  int Len;
}
При этом строки реализовывать с WideChar, а не с Char.
Хотелось бы узнать мнение других программистов на этот счет.
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение DCV » Вс май 29, 2011 8:27:35

Prof1983 писал(а): Но строки в разных компиляторах реализованы по разному. Кроме PChar, но при использование PChar не очень удобное и могут возникать проблемы, если в строке присутствуют нулевые символы.


Так всегда будет. Универсальные возможности, которые используются в разных компиляторах и на разных платформах, будут неудобными.


Prof1983 писал(а):Поэтому я решил передачу строк реализовать так же как это сделано в GTK. А именно использовать структуру:
Код: Выделить всё
type
  AString_Type = packed record
    Str: PWideChar;
    Len: AInteger;
  end;
или
Код: Выделить всё
struct AString_Type
{
  wchar* Str;
  int Len;
}
При этом строки реализовывать с WideChar, а не с Char.
Хотелось бы узнать мнение других программистов на этот счет.


На С# переменная типа string является объектом класса string. Это значит, что к строковой переменной можно применять методы класса для обработки строки и можно обращаться к переменным класса. В частности есть свойство Length - длина строки. Если мы объявили строковую переменную:

Код: Выделить всё
string str = "Это строка символов";


то можно обратиться к свойству, которое хранит длину:

Код: Выделить всё
int len = str.Length;


Это значит, что на C# такая структура как у Вас (и даже более сложная) уже реализована внутри языка. Программисту не нужно тратить время и силы на ее объявление.

Поддержка многоплатформенности всегда будет обходиться дорого для программиста.
(С) Александр Белов
Диалоговая система Думбот 2 v1.2: http://www.iknowww.ru/Products/Dumbot
Думбот 3 www.dumbot.ru

Золотой Будда не переправится через плавильный котел. Деревянный Будда не переправится через огонь. Глиняный Будда не переправится через реку.
Аватара пользователя
DCV
Эксперт ИИ
 
Сообщения: 615
Зарегистрирован: Ср апр 21, 2010 11:43:51
Откуда: Беларусь, Гомель

Re: Передача строковых параметров

Сообщение victorst » Вс май 29, 2011 13:58:19

http://ru.wikipedia.org/wiki/Base64 как один из вариантов. Тогда можно смело пользоваться нуль-терминальной строкой. И еще - желательно UTF8 строками обмениваться:
UTF8->Base64->канал связи->Base64->UTF8
Аватара пользователя
victorst
Полноправный участник
 
Сообщения: 1073
Зарегистрирован: Вс янв 09, 2005 22:36:18
Откуда: Россия, г.Омск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 14:15:55

victorst писал(а):http://ru.wikipedia.org/wiki/Base64 как один из вариантов. Тогда можно смело пользоваться нуль-терминальной строкой. И еще - желательно UTF8 строками обмениваться:
UTF8->Base64->канал связи->Base64->UTF8

Идея интересная. Для передачи данных по сети или для сокрытия данных подойдет. Но для передачи строки, как параметров функции будут слишком большие накладные расходы времени на кодирование/раскодирование строки. По этой же причине UTF-8 не подходит.

Для хранения информации UTF-8 хороший формат, а для работы внутри программы UTF-8 лучше переводить в формат с одинаковым размером на каждый символ.

Хм... Кстати. Интересный вопрос всплыл, ответ на который я не знаю. А wchar_t - это двухбайтовый символ. А какой это стандарт? UTF-16?
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 14:25:50

Таким образом, первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 216 (65 536). Отсюда происходит практика обозначения символов четырьмя шестнадцатеричными цифрами (например, U+0410). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. Редко используемые символы должны были размещаться в «области пользовательских символов» (private use area), которая первоначально занимала коды U+D800…U+F8FF. Чтобы использовать Юникод также и в качестве промежуточного звена при преобразовании разных кодировок друг в друга, в него включили все символы, представленные во всех наиболее известных кодировках.

В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим, коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. Способы представления).

ru.wikipedia.org

Интересно еще как реализовано хранение строк в Java и в C#. На сколько мне известно там строки хранятся в виде последовательности двухбайтовых символов. Где каждый первый байт символа указывает кодовую страницу, а второй байт - символ.
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 14:52:10

В Microsoft Windows NT и основанных на ней системах Windows 2000 и Windows XP в основном используется форма UTF-16LE. В UNIX-подобных операционных системах GNU/Linux, BSD и Mac OS X принята форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в оперативной памяти.

В операционных системах семейства Windows NT для внутреннего представления имён файлов и других системных строк используется двухбайтовая кодировка UTF-16LE. Системные вызовы, принимающие строковые параметры, существуют в однобайтном и двухбайтном вариантах. Подробнее см. в статье Юникод в операционных системах Microsoft.

UNIX-подобные операционные системы, в том числе GNU/Linux, BSD, Mac OS X, используют для представления Юникода кодировку UTF-8. Большинство программ могут работать с UTF-8 как с традиционными однобайтными кодировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно перекодируются в UCS-4, так что каждому символу соответствует машинное слово.

Одной из первых успешных коммерческих реализаций Юникода стала среда программирования Java. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.


А вот собственно ответ про wchar_t
wchar_t — это тип данных стандарта ANSI/ISO C (а также использующийся в других языках программирования) для представления широких символов.

«ANSI/ISO C оставляет семантику широких символов на усмотрение конкретной реализации»

«размер типа wchar_t определяется компилятором, вплоть до минимальных 8 бит. Соответственно, приложения, которым требуется сохранять переносимость на различных C и C++ компиляторах, не должны использовать wchar_t для хранения Unicode-текста. Тип wchar_t предназначен для хранения широких символов в том виде, в котором их понимают конкретные компиляторы, и это может не соответствовать Юникоду».

В Windows API, тип wchar_t имеет размер 16 бит. Windows API нарушает стандарт ANSI/ISO C, который требует, чтобы символьный тип wchar_t поддерживал все представимые в системе символы в одном объекте wchar_t. Вместо этого, wchar_t в Windows представляет собой символы (либо часть символа) в кодировке UTF-16.

В GNU/Linux тип wchar_t имеет размер 32 бита.

Широкий символ

Так может быть для AIKernel закрепить передачу строк в виде UTF-32?
То есть
Код: Выделить всё
type
  AString_Type = packed record
    Str: Pointer; // Указатель на массив 32-битных символов Unicode
    Len: Integer;
  end;
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение victorst » Вс май 29, 2011 15:38:15

Prof1983 писал(а):Так может быть для AIKernel закрепить передачу строк в виде UTF-32?
И чем это лучше UTF-8? В UTF-32 кроме одного преимущества - одноширинности каждого символа других я не вижу. Недостатки - нужно перекодировать и не каждая система корректно его переведет во внутреннее представление, гигантская избыточность - будет около 3 байт в каждом символе неиспользуемы.
Я в AIAssistant использую UTF-8 и доволен как слон. Чего и вам желаю.
Аватара пользователя
victorst
Полноправный участник
 
Сообщения: 1073
Зарегистрирован: Вс янв 09, 2005 22:36:18
Откуда: Россия, г.Омск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 16:04:05

Да. Наверное UTF-8 использовать лучше, чем другие варианты. Причины я вижу такие:
1. Могут быть потенциальные проблемы с wchar_t, т.к. в Windows и в *nix разные стандарты на wchar_t. Кроме этого разные реализации в разных компиляторах. По этой причине от WideChar лучше отказаться совсем.
2. Одинаковое кол-во байтов на один символ - это удобно. Удобно делать обращение к символам по индексу. Но в этом нет большой необходимости. Всегда можно преобразовать из одного формата в другой и выполнить действия со строкой, как с массивом символов.
3. Явная избыточность UTF-32 на лицо. Фактически большинство часто используемых символов требует одного байта.

Из этого следует, что UTF-8 - наилучший вариант.

Но передавать его как нультерминальную строку нельзя, т.к. стандарт UTF не запрещает нулевой символ. Поэтому нужно с указателем на строку передавать еще и длину строки. Это удобно объединить в структуру.
Код: Выделить всё
type
  AString_Type = packed record
    Str: PChar; // UTF-8 string
    Len: Integer;
  end;

Это хороший вариант. Более того, в GTK для передачи строк используется точно такая же структура (GString).

Виктор, кстати поздравляю с вашим сообщением за номером 1001! Такое событие нужно отметить! :)
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение DCV » Вс май 29, 2011 16:32:52

Prof1983 писал(а):Интересно еще как реализовано хранение строк в Java и в C#. На сколько мне известно там строки хранятся в виде последовательности двухбайтовых символов. Где каждый первый байт символа указывает кодовую страницу, а второй байт - символ.


В С# используется Юникод из 2 байт для одного символа. Есть возможность использовать разные кодировки. Для хранения символов всех иностранных языков числа 256 в одном байте недостаточно. По-моему Юникод может хранить даже китайские иероглифы.
(С) Александр Белов
Диалоговая система Думбот 2 v1.2: http://www.iknowww.ru/Products/Dumbot
Думбот 3 www.dumbot.ru

Золотой Будда не переправится через плавильный котел. Деревянный Будда не переправится через огонь. Глиняный Будда не переправится через реку.
Аватара пользователя
DCV
Эксперт ИИ
 
Сообщения: 615
Зарегистрирован: Ср апр 21, 2010 11:43:51
Откуда: Беларусь, Гомель

Re: Передача строковых параметров

Сообщение victorst » Вс май 29, 2011 16:41:03

Prof1983 писал(а):Виктор, кстати поздравляю с вашим сообщением за номером 1001! Такое событие нужно отметить! :)
Спасибо за поздравление. Я случайно, я не специально, оно само так вышло.
Действительно, в данной теме идет речь о передаче, а не об обработке строковых параметров. С этой точки зрения и нужно рассматривать строки. Поэтому я и предложил UTF-8. Получив строку, можете немедленно преобразовать к тому виду, в котором удобнее обрабаатывать на данной платформе и пользоваться и UTF-16 и UTF -32 или еще чем. Но с нулем внутри строки - да, я напарывался на такое не раз. Особенно когда нужно строкой передать массив численных данных. Поэтому параметр длины строки желателен. Но как быть с самим нулем в конце строки? Логично было бы его оттуда убрать при передаче.
Аватара пользователя
victorst
Полноправный участник
 
Сообщения: 1073
Зарегистрирован: Вс янв 09, 2005 22:36:18
Откуда: Россия, г.Омск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 16:51:38

DCV писал(а):По-моему Юникод может хранить даже китайские иероглифы.

В Microsoft Windows NT и основанных на ней системах Windows 2000 и Windows XP в основном используется форма UTF-16LE.
http://ru.wikipedia.org/wiki/Unicode

Я еще раз подумал про UTF-8. Дело в том, что можно использовать UTF-16 без использования wchar_t. Поэтому мое предыдущее высказывание "1. Могут быть потенциальные проблемы с wchar_t, т.к. в Windows и в *nix разные стандарты на wchar_t. Кроме этого разные реализации в разных компиляторах. По этой причине от WideChar лучше отказаться совсем." не имеет значения.

Стало быть UTF-16 ни чем не хуже, чем UTF-8. Лишней избыточности не много. На один символ будет приходится 2 байта, а не 4 как в UTF-32. Хотя при UTF-16 не получится гарантировать одинаковый размер для всех символов. На сколько я понял, редко используемые символы в UTF-16 могут записываться в 4 байта.

Но тем не менее, UTF-8 вроде более распространен и поддерживается в многих библиотечках (в том числе преобразование UTF-8 входит в System.pas в Delphi).
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение victorst » Вс май 29, 2011 17:40:12

Дело в том, что в мире еще полно старых программ или библиотек функций, работающих с обычными нуль-терминальными строками и др. неюникодовыми строками. UTF-8 позволяет этим программам и ф-циям (если в нем нет 0) прозрачно работать. Только там где нужно учитывать юникодовость, например, при выводе на экран требуется учет этого.
Если вы откроете Notepad++, то в нем есть два режима сохранения текста UTF-8 - с BOM и без BOM. Этот BOM - набор специальных байт в начале текста, который говорит, что текст в документе UTF-8. И программы, знающие такой префикс в начале текста автоматически будут воспринимать текст как UTF-8. Зачем нужен вариант без BOM? Для старых программ. Этот BOM приводит их к некорректной работе. UTF-8 при грамотном обращении позволяет значительно расширить потенциальный круг применения вашей системы.

http://ru.wikipedia.org/wiki/UTF-8
"В отличие от UTF-16, UTF-8 является самосинхронизирующейся кодировкой[1]: при потере одного байта последующие байты будут раскодированы корректно." Весьма полезное свойство для любого канала передачи данных, не правда ли?
Аватара пользователя
victorst
Полноправный участник
 
Сообщения: 1073
Зарегистрирован: Вс янв 09, 2005 22:36:18
Откуда: Россия, г.Омск

Re: Передача строковых параметров

Сообщение Prof1983 » Вс май 29, 2011 18:44:59

Да. Все верно.
Я вот еще смотрю на реализацию функций GTK. Вот например:
http://www.opennet.ru/docs/RUS/glib_api ... rsion.html
Там практически везде используется *gchar. Это то же самое что *char. Спрашивается зачем тогда нужен тип GString (http://www.opennet.ru/docs/RUS/glib_api ... ml#GString)?
Не могу понять.

Может быть тогда вообще прийти к старому классическому виду и передавать все строки между модулями AIKernel как PChar/*char, добавляя дополнительный параметры длины строки в байтах?
То есть
Код: Выделить всё
function Example(S: PChar; Len: Integer; OutStr: PPChar; MaxLenOutStr: Integer): Integer;


Что-то я запутался.
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение victorst » Вс май 29, 2011 19:11:18

Разница между просто *char и *char UTF-8 в том, что источник и приемник сообщения заранее знают, что содержимое стрки либо ASCII либо UTF-8. Это априорное соглашение сторон. Оно позволяет соотетственно обрабатывать строки. Вот и все. Поэтому если вы отправите обычную *char строку, то в ней нельзя будет закодировать символы, код которых больше 127.
Аватара пользователя
victorst
Полноправный участник
 
Сообщения: 1073
Зарегистрирован: Вс янв 09, 2005 22:36:18
Откуда: Россия, г.Омск

Re: Передача строковых параметров

Сообщение daner » Вс май 29, 2011 21:41:57

Если вам по какой-то причине хочется изобретать свое колесо, да еще и с прицелом на всевозможные варианты, то лучше использовать, что-то типа такой структуры и соответствующих функций (а лучше конечно класс)
class UString{// от слова универсальный.
uint code,
uint size,
uint strSize,
char* str
};
ну str понятно, size -- кол-во символов, strSize -- длинна строки в байтах, ну и code -- это идентификатор кодировки.
(естественно size , strSize связанны через code, но лучше иметь их оба, тратит не много места, но зато экономит ненужные подсчеты, особенно когда строки большие, а кодировка не предусматривает постоянного кол-во байт за одним символом).
Ну опять таки, тут еще бы подумать о том, как такие строки будут в основном использоваться в вашей системе... если правок в них будет много, то... как обычно стоит взвешивать всевозможные структуры (типа списков, динамических массивов и т.д.), соответственно поля тоже могут меняться в зависимости от структуры данных.

Но для чего вам весь этот геморрой? я так и не могу понять. используйте готовые библиотеки типа boost-а и т.д. Нравится GTK ну так и пользуйтесь его стандартами.
Аватара пользователя
daner
Эксперт ИИ
 
Сообщения: 1811
Зарегистрирован: Сб фев 10, 2007 19:10:44
Откуда: Israel

Re: Передача строковых параметров

Сообщение Prof1983 » Ср июн 01, 2011 19:47:21

daner писал(а):class UString{// от слова универсальный.
uint code,
uint size,
uint strSize,
char* str
};
Идея хорошая. Вот только класс смысла использовать нету, лучше структуру.
Я решил пока реализовать передачу строк между модулей с помощью указателя на структуру AString_Type. При этом внутреннее содержание пока не раскрываю, а вместо этого будут реализованы примерно такие функции (Pascal):
Код: Выделить всё
type
  AString = ^AString_Type; // Указатель. Можно записать и так: AString = Pointer;

function A_String_New(S: AString): AString; stdcall;
function A_String_NewC(S: PChar; Len: AInteger): AString; stdcall; // Ansi
function A_String_NewU(S: PChar; Size: ASize): AString; stdcall; // UTF-8

А работу со строками реализовать внутри одного из основных модулей в виде примерно таких функций:
Код: Выделить всё
function A_System_String_Length(S: AString): AInteger; stdcall;
function A_System_String_Compare(Str1, Str2: AString): AInteger; stdcall;
function A_System_String_CompareA(Str1, Str2: AString; IgnoreCase: ABoolean): AInteger; stdcall;
function A_System_String_Concat(Str1, Str2: AString): AString; stdcall;
function A_System_String_ConcatA(Str1, Str2, Str3: AString): AString; stdcall;
function A_System_String_IndexOfCh(S: AString; Ch: AChar): AInteger; stdcall;
function A_System_String_IndexOfStr(S, Str: AString): AInteger; stdcall;
function A_System_String_LastIndexOfCh(S: AString; Ch: AChar): AInteger; stdcall;
function A_System_String_LastIndexOfStr(S, Str: AString): AInteger; stdcall;

Реализовать для начала основные. А за тем, по мере необходимости добавлять еще функций.
А для использования строки преобразовывать примерно так:
Код: Выделить всё
function String_ToWideString(S: AString): WideString; stdcall;
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение DCV » Чт июн 02, 2011 8:57:55

Prof1983 писал(а):А работу со строками реализовать внутри одного из основных модулей в виде примерно таких функций:
Код: Выделить всё
function A_System_String_Length(S: AString): AInteger; stdcall;
function A_System_String_Compare(Str1, Str2: AString): AInteger; stdcall;
function A_System_String_CompareA(Str1, Str2: AString; IgnoreCase: ABoolean): AInteger; stdcall;
function A_System_String_Concat(Str1, Str2: AString): AString; stdcall;
function A_System_String_ConcatA(Str1, Str2, Str3: AString): AString; stdcall;
function A_System_String_IndexOfCh(S: AString; Ch: AChar): AInteger; stdcall;
function A_System_String_IndexOfStr(S, Str: AString): AInteger; stdcall;
function A_System_String_LastIndexOfCh(S: AString; Ch: AChar): AInteger; stdcall;
function A_System_String_LastIndexOfStr(S, Str: AString): AInteger; stdcall;

Реализовать для начала основные. А за тем, по мере необходимости добавлять еще функций.


Вы что, серьезно хотите писать функции для работы со строками? Я тоже начал писать классы для работы с прямоугольными таблицами. А не проще взять готовые?
(С) Александр Белов
Диалоговая система Думбот 2 v1.2: http://www.iknowww.ru/Products/Dumbot
Думбот 3 www.dumbot.ru

Золотой Будда не переправится через плавильный котел. Деревянный Будда не переправится через огонь. Глиняный Будда не переправится через реку.
Аватара пользователя
DCV
Эксперт ИИ
 
Сообщения: 615
Зарегистрирован: Ср апр 21, 2010 11:43:51
Откуда: Беларусь, Гомель

Re: Передача строковых параметров

Сообщение Prof1983 » Чт июн 02, 2011 11:25:34

DCV писал(а):А не проще взять готовые?
Проще, но я пока не нашел подходящий Toolkit или библиотечки. Требования такие:
1. Простой процедурный интерфейс, чтобы была возможность использования в разных языках программирования;
2. Лицензия, позволяющая свободное использование (BSD например).

Предлагайте варианты.
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

Re: Передача строковых параметров

Сообщение DCV » Пт июн 03, 2011 15:20:57

Prof1983 писал(а):2. Лицензия, позволяющая свободное использование (BSD например).


Чем лицензия должна отличаться от лицензии на Visual Studio Express 2010, которая вроде бы бесплатная?
(С) Александр Белов
Диалоговая система Думбот 2 v1.2: http://www.iknowww.ru/Products/Dumbot
Думбот 3 www.dumbot.ru

Золотой Будда не переправится через плавильный котел. Деревянный Будда не переправится через огонь. Глиняный Будда не переправится через реку.
Аватара пользователя
DCV
Эксперт ИИ
 
Сообщения: 615
Зарегистрирован: Ср апр 21, 2010 11:43:51
Откуда: Беларусь, Гомель

Re: Передача строковых параметров

Сообщение Prof1983 » Пт июн 03, 2011 15:45:23

DCV писал(а):Чем лицензия должна отличаться от лицензии на Visual Studio Express 2010, которая вроде бы бесплатная?
Лицензия на готовое ПО - это одно, а лицензия на исходный код этого ПО - это другое. Лицензия на бинарники в основном разрешают использовать (на платной или бесплатной основе) и получать некий результат работы.

Я не в курсе какое разрешенное использование имеют исходные коды Visual Studio Express 2010 и есть ли эти исходные коды в общем доступе. Скорее всего их нет. Более того дезасемблировать или каким-либо другим способом смотреть внутренности бинарников от MS обычно запрещается.

Если имеете в виду исходный код, который предстоит самому написать в редакторе MSVS, то этот исходный код будет распространяться под такими условиями, какие установит автор (или правообладатель).

Или вы имели в виду что-то другое?
Новый проект AiKernel
Аватара пользователя
Prof1983
Серьёзный посетитель
 
Сообщения: 206
Зарегистрирован: Ср окт 11, 2006 13:29:31
Откуда: Новосибирск

След.

Вернуться в Проект AIKernel

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


cron


Rambler's Top100 Каталог ресурсов ListTop.Ru Каталог сайтов Союз образовательных сайтов Parenting.ru - Родители семья дети ребенок

     Сайт "Искусственный интеллект" - программирование ИИ от разработчика: общение, статьи, ссылки.