![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Элементарный код, а не работает. Подскажите в чем дело. [D7, XP]
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]
> А не может ли это быть глюком Виндоуса?
Так это Виндоуса тебе такой код наваяла?