en ru Передача строковых параметровПри реализации AIKernel столкнулся с проблемой передачи строк в виде параметров между модулями. Есть несколько вариантов: char* (PChar), string (класс Си++), string (массив символов с указанием длины). Но строки в разных компиляторах реализованы по разному. Кроме PChar, но при использование PChar не очень удобное и могут возникать проблемы, если в строке присутствуют нулевые символы. ...
Я решил пока реализовать передачу строк между модулей с помощью указателя на структуру 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; Обсуждение: project-ai.org/forum/viewtopic.php?t=6 |
© AiKernel 2010-2013
02.06.2011 - 28.12.2012