Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизЭлементарный код, а не работает. Подскажите в чем дело. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.015 c