Цитата Сообщение от Cs-Cs Посмотреть сообщение
Ты не забудь, что в конце готовой строки должен быть нулевой символ (два байта с кодом 0x00).
Возможно, его стоит явно добавлять в конец.
Вроде, и так работает, без нулей этих... Ну, пусть будет с нулями...

Код:
Код:
PROGRAM qqq3
VAR
	aaa1: WSTRING(1000) := "qwerty123";
	aaa2: WSTRING(1000) := "йцукен456";
	
	Temp : BOOL := FALSE;
END_VAR

IF Temp = TRUE THEN
	SuperAddWString(ADR(aaa1), ADR(aaa2));
	Temp := FALSE;
END_IF
Функция:
Код:
FUNCTION SuperAddWString : BOOL //Добавление второй строки в хвост первой
VAR_INPUT
	AddressMain: POINTER TO BYTE; //Главная строка
	AddressAdd:  POINTER TO BYTE; //Добавочный кусочек
END_VAR

//Длины строк
VAR
	Len1 : DWORD; //Длина главной строки
	Len2 : DWORD; //Длина добавленного кусочка
END_VAR

//Массив двух нулевых байтов
VAR CONSTANT
	Null : ARRAY[0..1] OF BYTE := [0, 0];
END_VAR

//Считаем длины строк
Len1 := TO_DWORD(STU.StrLenW(AddressMain)) * 2;
Len2 := TO_DWORD(STU.StrLenW(AddressAdd))  * 2;

//Присваиваем
Memutils.MemCpy(AddressMain + Len1, AddressAdd, Len2);

//Последние два байта запишем как нули
Memutils.MemCpy(AddressMain + Len1 + Len2, ADR(Null), 2);

//Бесполезный выход функции
SuperAddWString := FALSE;