Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.028 c
14-1131222143
Andy BitOff
2005-11-05 23:22
2005.11.27
Скорость света в вакууме перестала быть рекордом


14-1131012564
Bazi
2005-11-03 13:09
2005.11.27
Какие ограничения накладывает каждая версия Делфи?


3-1129194458
Delphinium
2005-10-13 13:07
2005.11.27
Blob-поля в InterBase


2-1131284903
Mouse_Rat
2005-11-06 16:48
2005.11.27
Как узнать путь к файлу?


4-1127743382
umbra
2005-09-26 18:03
2005.11.27
какое сообщение получает окно при его минимизации?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский