Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Небезопасный код в Delphi Explorer for .Net, only allowed in unsafe procedure 
:(
    Опции темы
Griznoff
Дата 18.3.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Начал переводить приложение, написанное на Delphi Explorer, на Delphi Explorer for .Net.
Просто открыл проект (думаю, вдруг так пойдёт smile ), жму запустить, пишет [Pascal Error] Service.pas(72): E2410 Unsafe pointer variables, parameters or consts only allowed in unsafe procedure.

Строка, где появилась ошибка: procedure StringToStream(Value: PChar; Length: Integer; Stream: TMemoryStream);

Куда копать?
Я надеюсь указатели в .Net можно использовать, а то их меня в проге куча? smile 
PM MAIL   Вверх
Snowy
Дата 18.3.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



PChar - указатель.
Все операции с указателями являются небезопасными.
Также в .NET нельзя использовать строку в качестве буфера.
PM MAIL   Вверх
Griznoff
Дата 19.3.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Snowy, то есть вообще чтоли указатели использовать нельзя? smile 

Я на англоязычных сайтах видел, что можно использовать диррективу для компилятора, которая позволяет небезопасный код.....но что-то не получилось её использовать...может как-то не так использовал (просто вставил директиву в секцию деклараций)?

Но мне как-то кажется кривым этот путь.....как без указателей-то кодировать???
PM MAIL   Вверх
Exai1e
Дата 19.3.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Griznoff, дык в шарпе тоже нет указателей) и ничего люди както умудряются программировать smile


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
kemiisto
Дата 22.3.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Использовать указатели можно в любом .NET языке. Для этого надо уведомить компилятор о разрешении работы с небезобасным кодом (unsafe code). В Delphi for .NET для этого необходимо:
  • в модуль, содержащий небезопасный код, включить директиву {$UNSAFECODE ON};
  • функции с небезопасным кодом пометить ключевым словом unsafe.
 
Вот небольшой пример:
Код

program Project1;

{$APPTYPE CONSOLE}
{$UNSAFECODE ON}

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Windows.Forms.dll'}

uses
  SysUtils,
  System.Windows.Forms;

procedure UsingPointers; unsafe;
var
  A: array[0..31] of Char;
  P: PChar;
begin
  A := 'delphi rocks!';
  P := @A;
  P[0] := 'D';
  MessageBox.Show(A);
end;  

begin
  UsingPointers;
end.

Однако надо учитывать, что 
Цитата(Ксавье Пачеко @  Delphi for .NET Руководство разработчика)

Небезопасный код абсолютно неприемлим в среде .NET, поскольку небезопасное приложение не подлежит осмотру инструментом .NET PEVerify, а следовательно, может быть запрещено системой безопасности. Однако небезопасный код может оказаться полезен при переходе от платформы Win32 к пплатформе .NET, ведь достаточно большое приложение Win32 будет весьма сложно перевести на платформу .NET сразу. Таким образом, возможность применения небезопасного кода позволит переводить приложение по частям, оставляя прежний код небезопасным до тех пор, пока все приложение не будет полностью переведено на безопасный код.



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Griznoff
Дата 23.3.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



kemiisto, спасибо, мне как раз для постепенного перехода и надо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.