![]() |
| ||
|
|
Новости |
Поиск |
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.
San1 (2005-11-08 16:06:00) [21]Я ответил бы на вопросы Digitman © (08.11.05 15:22) [6], если бы знал, что такое состояние опции Build With Run-Time packages
Tonich (2005-11-08 16:05:00) [22]ого -го )))))
San1 (2005-11-08 16:03:00) [23]Подключил один по одному разу и в хосте и в 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.
А не может ли это быть глюком Виндоуса?
sniknik (2005-11-08 16:01:00) [24]> На самом деле, это упрощенный вариант.
наводящий вопрос... а в этом упрощенном варианте та самая ошибка, что обсуждается, присутствует?
p.s. ответил бы полностью на вопросы Digitman © (08.11.05 15:22) [6], без отмазок, кусками не относящегося к вопросу кода.
Tonich (2005-11-08 15:56:00) [25]честно сказать даже незнаю ..
ты в хосте тольео один раз подключил ShareMEm ? ну тоесть только в одном модуле? больше нигде?
San1 (2005-11-08 15:51:00) [26]На самом деле, это упрощенный вариант. А вообще, она длинная и нужна для транслитерации с русского на английский и обратно.
Tonich (2005-11-08 15:45:00) [27]а зачем она вообще такая красивая нужна в dll - ке?:)
San1 (2005-11-08 15:39:00) [28]Функция в 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.
San1 (2005-11-08 15:34:00) [29]Подключил в Dll и хосте первым Sharemem, все здорово работает, но теперь при закрытии программы выскакивает Runtime error 217 at 00413B04.
Digitman (2005-11-08 15:22:00) [30]
> San1
показывай, как объявлена/реализована ф-ция RToE() в обоих проектах
показывай состояние опции Build With Run-Time packages
показывай как используешь и используешь ли ShareMem
Mike Kouzmine (2005-11-08 15:22:00) [31]А дллку по всем правилам создавал? (передаешь стринг)
umbra (2005-11-08 15:21:00) [32]там в модуле библиотеки как раз над
usesесть комментарий. в нем все написано
Tonich (2005-11-08 15:20:00) [33]подключи в Dll и хосте первым Sharemem
San1 (2005-11-08 15:18:00) [34]Ни каких своих не подключал, только те, которые по умолчанию:
SysUtils, Classes;
Tonich (2005-11-08 15:14:00) [35]а какие ты модули подключил своей библиотеке ?