| 
| 
 | Вопрос # 1 233/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты! С наступающим новым годом. Буду признателен если вы подскажете.Существует библиотека dll. Библиотека содержит модуль данных на котором расположены компоненты для доступа к данным. Сам код библиотеки принимает (из службы) строку подключения к субд Oracle и пытается подключиться. Но подключения не происходит.
 Приложение:Переключить в обычный режим library ArhPhErr; uses  SysUtils,  Classes,  DataUnitdll in 'DataUnitdll.pas' {DataModule1: TDataModule}; {$R *.res}function Connect(Username,Password,Server: String): Boolean; stdCall;begin try   With datamodule1 do  begin   Try    OraSession1.Username:=Username;    OraSession1.Password:=Password;    OraSession1.Server:=Server;    OraSession1.ConnectPrompt:=False;    OraSession1.Connected:=True;    result:=True;   except    Result:=False;   end;  end;  except     Result:=False;   end;end; Function Get_count(Bool : boolean) : integer; stdcall;begin    If bool = true then Begin    DataModule1.count.active:=True;    result:=DataModule1.count.Fields[0].AsInteger; end else  If bool = False then  begin   DataModule1.count.active:=False;   result:=0;  end;end; function ExArhErr(Archstart : Boolean) : boolean; stdCall; Begin  With datamodule1 do  begin  Try    OraScript1.SQL.Clear;    OraScript1.SQL.Add('DECLARE');    OraScript1.SQL.Add('Sysday NUMBER;');    OraScript1.SQL.Add('CURSOR c1 IS');    OraScript1.SQL.Add('SELECT
fa.phone_6,fa.data_in,fa.adopted,fa.mex,fa.data_out,fa.TYPE,dp.NAME,dp.port_asl,dp.stan,');    OraScript1.SQL.Add('dp.lin,dp.sak,dp.raspred,ap.street,ap.house,ap.house_ndx,ap.flat,fa.req');    OraScript1.SQL.Add('FROM failures fa, dep_phone dp, adres_pop ap');    OraScript1.SQL.Add('WHERE (fa.phone_6 = dp.phone_6) AND (dp.id = ap.id) AND');    OraScript1.SQL.Add('Months_Between(SYSDATE,fa.data_out) >= 2 AND fa.data_out IS NOT null;') ;    OraScript1.SQL.Add('BEGIN');    OraScript1.SQL.Add('FOR ROWS IN  c1 LOOP');    OraScript1.SQL.Add('INSERT INTO archiv_errors');   
OraScript1.SQL.Add('(phone_6,data_in,adopted,mex,data_out,TYPE,NAME,port_asl,stan,lin,sak,raspred,');    OraScript1.SQL.Add('street,house,house_ndx,flat,req) VALUES');   
OraScript1.SQL.Add('(ROWS.phone_6,ROWS.data_in,ROWS.adopted,ROWS.mex,ROWS.data_out,ROWS.TYPE,ROWS.NAME,');   
OraScript1.SQL.Add('ROWS.port_asl,ROWS.stan,ROWS.lin,ROWS.sak,ROWS.raspred,ROWS.street,ROWS.house,ROWS.house_ndx,');    OraScript1.SQL.Add('ROWS.flat,ROWS.req);');    OraScript1.SQL.Add('DELETE FROM failures');    OraScript1.SQL.Add('WHERE Months_Between(SYSDATE,data_out) >= 2 AND data_out IS NOT NULL;');    OraScript1.SQL.Add('END LOOP;');    OraScript1.SQL.Add('COMMIT;');    OraScript1.SQL.Add('END;');    OraScript1.Execute;    Result:=True;  except   Result:=False;  end;  end;end;   Exports ExArhErr,           Connect,           ExArhErr;begin end. 
|  |   Вопрос задал: John (статус: Посетитель)Вопрос отправлен: 27 декабря 2007, 05:44
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич Здравствуйте, zvialov!Для начала, в dll-лину передаются String'и, что в корне не верно. PChar в dll надо передавать (и принимать).
 
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 27 декабря 2007, 10:41; участников в обсуждении: 2. 
|   | John (статус: Посетитель), 27 декабря 2007, 10:05 [#1]:Я сам исправил свою ошибку, может не правильно, кто подскажет? 
 Я в библиотеке инициализировал создание модуля данных.
 begin
 Application.CreateForm(TDataModule1, DataModule1);
 end.
 И еще (отвечая на Отвечает эксперта ) я читал, что в библиотеку можно передавать в качестве параметров строки, но возвращать желательно  PChar
 |  
|   | Feniks (статус: Бакалавр), 27 декабря 2007, 10:33 [#2]:В DLL в качестве параметров можно передавать/получать строки типа String, НО обязательно надо в блоке uses первым подключать менеджер памяти от борланда, модуль borlndmm. Иначе, в памяти будет твориться бог знает что. Или же передавать/получать PChar. |  
|   | John (статус: Посетитель), 27 декабря 2007, 10:41 [#3]:Я понимать! Но библиотека в отладке.
 От того что и передавать не измениться. Если не вспомнить, что модуль данных необходимо инициализировать, только потом можно думать, что передавать. То и и слелал, я инициализировал модуль данных. Пепер буду посмотреть как он работает. И что передавать в библиотеку.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |