Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Элементарный код, а не работает. Подскажите в чем дело.   Найти похожие ветки 

 
San1   (2005-11-08 15:07) [0]

Функция, которую вызываю (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.


 
Tonich ©   (2005-11-08 15:14) [1]

а какие ты модули подключил своей библиотеке ?


 
San1   (2005-11-08 15:18) [2]

Ни каких своих не подключал, только те, которые по умолчанию:
SysUtils, Classes;


 
Tonich ©   (2005-11-08 15:20) [3]

подключи в Dll и хосте первым Sharemem


 
umbra ©   (2005-11-08 15:21) [4]

там в модуле библиотеки как раз над uses есть комментарий. в нем все написано


 
Mike Kouzmine ©   (2005-11-08 15:22) [5]

А дллку по всем правилам создавал? (передаешь стринг)


 
Digitman ©   (2005-11-08 15:22) [6]


> San1


показывай, как объявлена/реализована ф-ция RToE() в обоих проектах

показывай состояние опции Build With Run-Time packages

показывай как используешь и используешь ли ShareMem


 
San1   (2005-11-08 15:34) [7]

Подключил в Dll и хосте первым Sharemem, все здорово работает, но теперь при закрытии программы выскакивает Runtime error 217 at 00413B04.


 
San1   (2005-11-08 15:39) [8]

Функция в DLL, реализована следующим образом,

function RtoE(s:string):string;stdcall;
var
i,i1:integer;//Длина слова
a,a1,a2:string;

begin
a2:=s+"xxx";
Result:=a2;
end;

Exports
RtoE index 1;

begin
end.


 
Tonich ©   (2005-11-08 15:45) [9]

а зачем она вообще такая красивая нужна в dll - ке?:)


 
San1   (2005-11-08 15:51) [10]

На самом деле, это упрощенный вариант. А вообще, она длинная и нужна для транслитерации с русского на английский и обратно.


 
Tonich ©   (2005-11-08 15:56) [11]

честно сказать даже незнаю ..
ты в хосте тольео один раз подключил ShareMEm ?  ну тоесть только в одном модуле? больше нигде?


 
sniknik ©   (2005-11-08 16:01) [12]

> На самом деле, это упрощенный вариант.
наводящий вопрос... а в этом  упрощенном варианте та самая ошибка, что обсуждается, присутствует?

p.s. ответил бы полностью на вопросы Digitman ©   (08.11.05 15:22) [6], без отмазок, кусками не относящегося к вопросу кода.


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

Подключил один по одному разу и в хосте и в dll.
Вот на всякий случай, весь код dll с этой функцией.

library Perevod;

uses
 ShareMem,
 SysUtils,
 Classes;

{$R *.res}
//var
//i,i1:integer;//Длина слова
//a,a1,a2:string;

function RtoE(s:string):string;stdcall;
var
i,i1:integer;//Длина слова
a,a1,a2:string;
begin
i1:=length(s);
for  i:=1  to i1 do
begin
a:=copy(s,i,1);
if a="а" then a1:="a";
if a="б" then a1:="b";
if a="в" then a1:="v";
if a="г" then a1:="g";
if a="д" then a1:="d";
if a="е" then a1:="e";
if a="ё" then a1:="io";
if a="ж" then a1:="j";
if a="з" then a1:="z";
if a="и" then a1:="i";
if a="й" then a1:=#39+"i";
if a="к" then a1:="k";
if a="л" then a1:="l";
if a="м" then a1:="m";
if a="н" then a1:="n";
if a="о" then a1:="o";
if a="п" then a1:="p";
if a="р" then a1:="r";
if a="с" then a1:="s";
if a="т" then a1:="t";
if a="у" then a1:="u";
if a="ф" then a1:="f";
if a="х" then a1:="h";
if a="ш" then a1:="sh";
if a="ч" then a1:="ch";
if a="щ" then a1:="shch";
if a="ь" then a1:=#39;
if a="ъ" then a1:=#39+#39;
if a="ы" then a1:="i"+#39;
if a="э" then a1:="ai";
if a="ю" then a1:="y";
if a="я" then a1:="ia";
if a="ц" then a1:="c";
if a="А" then a1:="A";
if a="Б" then a1:="B";
if a="В" then a1:="V";
if a="Г" then a1:="G";
if a="Д" then a1:="D";
if a="Е" then a1:="E";
if a="Ё" then a1:="Io";
if a="Ж" then a1:="J";
if a="З" then a1:="Z";
if a="И" then a1:="I";
if a="Й" then a1:=#39+"I";
if a="К" then a1:="K";
if a="Л" then a1:="L";
if a="М" then a1:="M";
if a="Н" then a1:="N";
if a="О" then a1:="O";
if a="П" then a1:="P";
if a="Р" then a1:="R";
if a="С" then a1:="S";
if a="Т" then a1:="T";
if a="У" then a1:="U";
if a="Ф" then a1:="F";
if a="Х" then a1:="H";
if a="Ш" then a1:="Sh";
if a="Ч" then a1:="Ch";
if a="Ъ" then a1:=#39+#39;
if a="Ь" then a1:=#39;
if a="Щ" then a1:="Shch";
if a="Ы" then a1:="I"+#39;
if a="Э" then a1:="Ai";
if a="Ю" then a1:="Y";
if a="Я" then a1:="Ia";
if a="Ц" then a1:="C";
If a=#0 then a1:=#0;
If a=#1 then a1:=#1;
If a=#2 then a1:=#2;
If a=#3 then a1:=#3;
If a=#4 then a1:=#4;
If a=#5 then a1:=#5;
If a=#6 then a1:=#6;
If a=#7 then a1:=#7;
If a=#8 then a1:=#8;
If a=#9 then a1:=#9;
If a=#10 then a1:=#10;
If a=#11 then a1:=#11;
If a=#12 then a1:=#12;
If a=#13 then a1:=#13;
If a=#14 then a1:=#14;
If a=#15 then a1:=#15;
If a=#16 then a1:=#16;
If a=#17 then a1:=#17;
If a=#18 then a1:=#18;
If a=#19 then a1:=#19;
If a=#20 then a1:=#20;
If a=#21 then a1:=#21;
If a=#22 then a1:=#22;
If a=#23 then a1:=#23;
If a=#24 then a1:=#24;
If a=#25 then a1:=#25;
If a=#26 then a1:=#26;
If a=#27 then a1:=#27;
If a=#28 then a1:=#28;
If a=#29 then a1:=#29;
If a=#30 then a1:=#30;
If a=#31 then a1:=#31;
If a=#32 then a1:=#32;
If a=#33 then a1:=#33;
If a=#34 then a1:=#34;
If a=#35 then a1:=#35;
If a=#36 then a1:=#36;
If a=#37 then a1:=#37;
If a=#38 then a1:=#38;
If a=#39 then a1:=#39;
If a=#40 then a1:=#40;
If a=#41 then a1:=#41;
If a=#42 then a1:=#42;
If a=#43 then a1:=#43;
If a=#44 then a1:=#44;
If a=#45 then a1:=#45;
If a=#46 then a1:=#46;
If a=#47 then a1:=#47;
If a=#48 then a1:=#48;
If a=#49 then a1:=#49;
If a=#50 then a1:=#50;
If a=#51 then a1:=#51;
If a=#52 then a1:=#52;
If a=#53 then a1:=#53;
If a=#54 then a1:=#54;
If a=#55 then a1:=#55;
If a=#56 then a1:=#56;
If a=#57 then a1:=#57;
If a=#58 then a1:=#58;
If a=#59 then a1:=#59;
If a=#60 then a1:=#60;
If a=#61 then a1:=#61;
If a=#62 then a1:=#62;
If a=#63 then a1:=#63;
If a=#64 then a1:=#64;
If a=#65 then a1:=#65;
If a=#66 then a1:=#66;
If a=#67 then a1:=#67;
If a=#68 then a1:=#68;
If a=#69 then a1:=#69;
If a=#70 then a1:=#70;
If a=#71 then a1:=#71;
If a=#72 then a1:=#72;
If a=#73 then a1:=#73;
If a=#74 then a1:=#74;
If a=#75 then a1:=#75;
If a=#76 then a1:=#76;
If a=#77 then a1:=#77;
If a=#78 then a1:=#78;
If a=#79 then a1:=#79;
If a=#80 then a1:=#80;
If a=#81 then a1:=#81;
If a=#82 then a1:=#82;
If a=#83 then a1:=#83;
If a=#84 then a1:=#84;
If a=#85 then a1:=#85;
If a=#86 then a1:=#86;
If a=#87 then a1:=#87;
If a=#88 then a1:=#88;
If a=#89 then a1:=#89;
If a=#90 then a1:=#90;
If a=#91 then a1:=#91;
If a=#92 then a1:=#92;
If a=#93 then a1:=#93;
If a=#94 then a1:=#94;
If a=#95 then a1:=#95;
If a=#96 then a1:=#96;
If a=#97 then a1:=#97;
If a=#98 then a1:=#98;
If a=#99 then a1:=#99;
If a=#100 then a1:=#100;
If a=#101 then a1:=#101;
If a=#102 then a1:=#102;
If a=#103 then a1:=#103;
If a=#104 then a1:=#104;
If a=#105 then a1:=#105;
If a=#106 then a1:=#106;
If a=#107 then a1:=#107;
If a=#108 then a1:=#108;
If a=#109 then a1:=#109;
If a=#110 then a1:=#110;
If a=#111 then a1:=#111;
If a=#112 then a1:=#112;
If a=#113 then a1:=#113;
If a=#114 then a1:=#114;
If a=#115 then a1:=#115;
If a=#116 then a1:=#116;
If a=#117 then a1:=#117;
If a=#118 then a1:=#118;
If a=#119 then a1:=#119;
If a=#120 then a1:=#120;
If a=#121 then a1:=#121;
If a=#122 then a1:=#122;
If a=#123 then a1:=#123;
If a=#124 then a1:=#124;
If a=#125 then a1:=#125;
If a=#126 then a1:=#126;
If a=#127 then a1:=#127;
If a=#128 then a1:=#128;
If a=#129 then a1:=#129;
If a=#130 then a1:=#130;
If a=#131 then a1:=#131;
If a=#132 then a1:=#132;
If a=#133 then a1:=#133;
If a=#134 then a1:=#134;
If a=#135 then a1:=#135;
If a=#136 then a1:=#136;
If a=#137 then a1:=#137;
If a=#138 then a1:=#138;
If a=#139 then a1:=#139;
If a=#140 then a1:=#140;
If a=#141 then a1:=#141;
If a=#142 then a1:=#142;
If a=#143 then a1:=#143;
If a=#144 then a1:=#144;
If a=#145 then a1:=#145;
If a=#146 then a1:=#146;
If a=#147 then a1:=#147;
If a=#148 then a1:=#148;
If a=#149 then a1:=#149;
If a=#150 then a1:=#150;
If a=#151 then a1:=#151;
If a=#152 then a1:=#152;
If a=#153 then a1:=#153;
If a=#154 then a1:=#154;
If a=#155 then a1:=#155;
If a=#156 then a1:=#156;
If a=#157 then a1:=#157;
If a=#158 then a1:=#158;
If a=#159 then a1:=#159;
If a=#160 then a1:=#160;
If a=#161 then a1:=#161;
If a=#162 then a1:=#162;
If a=#163 then a1:=#163;
If a=#164 then a1:=#164;
If a=#165 then a1:=#165;
If a=#166 then a1:=#166;
If a=#167 then a1:=#167;
//If a=#168 then a1:=#168;
If a=#169 then a1:=#169;
If a=#170 then a1:=#170;
If a=#171 then a1:=#171;
If a=#172 then a1:=#172;
If a=#173 then a1:=#173;
If a=#174 then a1:=#174;
If a=#175 then a1:=#175;
If a=#176 then a1:=#176;
If a=#177 then a1:=#177;
If a=#178 then a1:=#178;
If a=#179 then a1:=#179;
If a=#180 then a1:=#180;
If a=#181 then a1:=#181;
If a=#182 then a1:=#182;
If a=#183 then a1:=#183;
//If a=#184 then a1:=#184;
If a=#185 then a1:=#185;
If a=#186 then a1:=#186;
If a=#187 then a1:=#187;
If a=#188 then a1:=#188;
If a=#189 then a1:=#189;
If a=#190 then a1:=#190;
If a=#191 then a1:=#191;
a2:=a2+a1;
end;
Result:=a2;
end;

Exports
RtoE index 1;

begin
end.

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


 
Tonich ©   (2005-11-08 16:05) [14]

ого -го )))))


 
San1   (2005-11-08 16:06) [15]

Я ответил бы  на вопросы Digitman ©   (08.11.05 15:22) [6], если бы знал, что такое  состояние опции Build With Run-Time packages


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


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

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


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


> San1   (08.11.05 16:03) [13]


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


> San1   (08.11.05 16:06) [15]



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


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


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

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


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


> San1   (08.11.05 16:19) [18]


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


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


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

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


 
Digitman ©   (2005-11-08 16:34) [21]


> San1   (08.11.05 16:31) [20]


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


 
Anatoly Podgoretsky ©   (2005-11-08 16:39) [22]

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


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

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


 
Digitman ©   (2005-11-08 16:51) [24]


> San1   (08.11.05 16:46) [23]


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

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


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

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


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

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


 
Digitman ©   (2005-11-08 17:07) [27]


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


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


 
Tonich ©   (2005-11-08 17:10) [28]


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

)))))))))))


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

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


 
Digitman ©   (2005-11-08 17:20) [30]


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


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


 
Джо ©   (2005-11-08 17:20) [31]


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

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


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

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


 
Джо ©   (2005-11-08 17:22) [32]

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


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

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


 
Fay ©   (2005-11-09 06:30) [34]

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


 
Amoeba ©   (2005-11-09 11:49) [35]

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.06 c
2-1131284903
Mouse_Rat
2005-11-06 16:48
2005.11.27
Как узнать путь к файлу?


5-1112022648
JenekX
2005-03-28 19:10
2005.11.27
Сохранение свойств компонентов в файл


2-1131447206
lionmen
2005-11-08 13:53
2005.11.27
MAC address


14-1130860799
oleggar
2005-11-01 18:59
2005.11.27
clipper 5.3


2-1131352457
DevMaster
2005-11-07 11:34
2005.11.27
Что внутри?