Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Элементарный код, а не работает. Подскажите в чем дело. [D7, XP]


Страницы:   1 2

San1 ©   (2005-11-08 15:07:00) 

Функция, которую вызываю (RtoE), работает. Однако, полученное значение t не выводит и к тому же, выдает ошибку класса EAccsesViolation.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

TRtoE=function(s:string):string; stdcall;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Handle:longword;
RtoE:TRtoE;
t:string;
begin

try
Handle:=LoadLibrary('Perevod.dll');
@RtoE:=GetProcAddress(Handle,'RtoE');
t:=edit1.Text;
t:=RtoE(t);//Функция все делает хорошо
FreeLibrary(Handle);
edit1.text:=t;
except
on E:exception do showmessage(e.ClassName+#13+e.Message)
end;
end;

end.


Amoeba   (2005-11-09 11:49:00) [1]

Пример того, как правильноделать перекодировку (аналогичная задача) приведен здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1100


Fay   (2005-11-09 06:30:00) [2]

2 San1   (08.11.05 16:03) [13]
Из кода RtoEследует с неизбежностью, что переменая аможет принимать несколько значений одновременно. Это немного странно.


San1   (2005-11-08 23:43:00) [3]

Наконец-то нашел ошибку. Я неправильно понял слово хост, в котором Tonich посоветовал, прописать ShareMem. Я по своей неграмотности прописал его в модуле проекта, а следовало его прописать в самом проекте.
Прошу прощения за свой маразм.


Джо   (2005-11-08 17:22:00) [4]

Кстати, по самому что ни на есть сабжу. Для начала полностю перепиши свою кучу if'ов. Так не пишут. Такому коду место на помойке, а не в DLL. Это даже НЕ имхо.


Джо   (2005-11-08 17:20:00) [5]


>  [29] San1   (08.11.05 17:16)
> Ладно, поковыряюсь в своем коде сам. Скорее всего я сам
> где-то ступил незаметно.

Это здравая мысль :)


Если что переустановлю Делфи, ну
> а на худой конец, переустановлю Виндоус.

А это нездоровые веяния :)


Digitman   (2005-11-08 17:20:00) [6]


> Если что переустановлю Делфи, ну а на худой конец, переустановлю
> Виндоус


чего уж там мелочиться) ... выкинь до кучи и комп на свалку и приобрети новый - авось в компе проблема была)


San1   (2005-11-08 17:16:00) [7]

Ладно, поковыряюсь в своем коде сам. Скорее всего я сам где-то ступил незаметно. Если что переустановлю Делфи, ну а на худой конец, переустановлю Виндоус.


Tonich   (2005-11-08 17:10:00) [8]


> Джо ©   (08.11.05 16:52) [25]

)))))))))))


Digitman   (2005-11-08 17:07:00) [9]


> Добавил в оба проекта ShareMem(первым в списке).


надеюсь, первым в uses-списке именно dpr-файла ?


San1   (2005-11-08 17:04:00) [10]

Добавил в оба проекта ShareMem(первым в списке). Убрал в обоих проектах Build With Run-Time. При закрытии программы получаю Runtime error 217 at 00413B04.


Джо   (2005-11-08 16:52:00) [11]

Только, чую, следующим будет вопрос - почему на другой машине программа перестала запускаться :)


Digitman   (2005-11-08 16:51:00) [12]


> San1   (08.11.05 16:46) [23]


если бы ты еще понял, что при этом происходит, действительно была бы алилуйя)

теперь отключи опции в обоих проектах и верни в оба проекта ShareMem - та же алилуйя)


San1   (2005-11-08 16:46:00) [13]

Алилуйя! Включил опцию Build With Run-Time в хосте и в длл, отключил ShareMem там и там и все здорово заработало. Ура!!! Большое всем спасибо и особенно Digitman ©.


Anatoly Podgoretsky   (2005-11-08 16:39:00) [14]

Значит первое что делаешь, это удаляешь библиотеку, затем переносишь весь код в модуль. С ДЛЛ будешь работать по позже, когда научишься.


Digitman   (2005-11-08 16:34:00) [15]


> San1   (08.11.05 16:31) [20]


и на какую строчку указывает адрес в сообщении об AV ?


San1   (2005-11-08 16:31:00) [16]

Sharemem убрал (при включенной опции Build With Run-Time packages
), но все равно ошибка класса EAccsesViolation.


Digitman   (2005-11-08 16:22:00) [17]


> San1   (08.11.05 16:19) [18]


> Включил опцию Build With Run-Time packages


а Sharemem при этом убрал ?)


San1   (2005-11-08 16:19:00) [18]

Включил опцию Build With Run-Time packages. Все равно выскакивает Runtime error 217 at 00413B04.


Digitman   (2005-11-08 16:11:00) [19]


> San1   (08.11.05 16:03) [13]


ну ты и нагородил !))


> San1   (08.11.05 16:06) [15]



> что такое  состояние опции Build With Run-Time packages


в свойства проекта когда-нибудь заглядывал ? в частности - в закладку Packages ? или это тебе ни о чем не говорит ?


Плохиш   (2005-11-08 16:08:00) [20]


> А не может ли это быть глюком Виндоуса?

Так это Виндоуса тебе такой код наваяла?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо