Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 22:14   #1
daemon-rm
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 25
По умолчанию Pointer через Move в WideString проблема

вот код:
Код:
var
aRSRC: HRSRC; aGlobal: HGLOBAL; aSize: DWORD; aPointer: Pointer; aStream: TStringStream;
begin
     aModule := LoadLibrary...;
     aRSRC := FindResource(aModule, aName, aType);
     if aRSRC <> 0 then begin
          aGlobal := LoadResource(aModule, aRSRC);
          aSize := SizeofResource(aModule, aRSRC);
          if (aGlobal <> 0) and (aSize <> 0) then begin
               aPointer := LockResource(aGlobal);
               if Assigned(aPointer) then begin
                  aStream := TStringStream.Create('');
                  aStream.WriteBuffer(aPointer^, aSize);
                  aStream.DataString:=Моя переменная;  
                  aStream.Free;
               end;
          end;
     end;
end;
но если ресурс в юникоде, то передает каких то 3 символа. пытался делать так:
Код:
var Моя переменная: WideString;
begin
   setLength(Моя переменная,aSize);
   move(aPointer^,Моя переменная,aSize);
end;
но это не работает, access violation. подскажите пожалуйста что нужно подправить?

Последний раз редактировалось daemon-rm; 30.07.2010 в 22:19.
daemon-rm вне форума Ответить с цитированием
Старый 31.07.2010, 16:38   #2
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

access violation в каком месте кода?
baster128 вне форума Ответить с цитированием
Старый 31.07.2010, 19:37   #3
daemon-rm
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 25
По умолчанию

Код:
var
aRSRC: HRSRC; aGlobal: HGLOBAL; aSize: DWORD; aPointer: Pointer;
begin
     aModule := LoadLibrary...;
     aRSRC := FindResource(aModule, aName, aType);
     if aRSRC <> 0 then begin
          aGlobal := LoadResource(aModule, aRSRC);
          aSize := SizeofResource(aModule, aRSRC);
          if (aGlobal <> 0) and (aSize <> 0) then begin
               aPointer := LockResource(aGlobal);
               if Assigned(aPointer) then begin
                 setLength(Моя переменная,aSize);
                 move(aPointer^,Моя переменная,aSize); 
               end;
          end;
     end;
end;

Последний раз редактировалось daemon-rm; 31.07.2010 в 19:47.
daemon-rm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура MOVE iiunbreakableii Общие вопросы Delphi 1 15.09.2009 16:35
Передача процедуры в процедуру через Pointer. Вадим Буренков Общие вопросы Delphi 1 13.09.2009 11:42
Delphi 7 - скрытые возможности Unicode (WideString) BOBAH13 Общие вопросы Delphi 7 13.03.2009 08:40
как выделить память для указателя (pointer), и сюда же, записать : integer, потом через 4 байта, boolean? bigxman Общие вопросы Delphi 1 02.02.2009 21:17
WideString и String Mitron Общие вопросы Delphi 1 11.02.2008 19:14