Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
ВнизDelphi 5 и Delphi 6. Компиляция DLL Найти похожие ветки
← →
EugeneP (2002-07-18 11:56) [0]Есть исходник dll ки
он написан для приложения на Delphi 5
компилю его в 5-ке - все нормально
компилю в 6- ке - ошибка при вызове
В чем разнинца может быть???
DLL использует компоненты IBX.
Что интересно у них даже размер разный получается.
Просто ставить 5-ку не хочется так как задача единственная.
Может настройки какие в проекте поменять???
Спасибо.
← →
Digitman (2002-07-18 12:03) [1]Ошибка-то какая ? Конкретно ?
← →
EugeneP (2002-07-18 12:07) [2]Access Violation XXX (адрес точно не помню могу уточнить)
← →
Anatoly Podgoretsky (2002-07-18 12:08) [3]Ты не врешь насчет ошибки
← →
EugeneP (2002-07-18 12:09) [4]Нет
причем размеры скомпиленных длл разные для 5 и 6 делфей
← →
EugeneP (2002-07-18 12:12) [5]Кстати еще момент
длл использует компоненты IBX
может из за этого???
← →
Skier (2002-07-18 12:14) [6]>EugeneP
А код, дружище ! :)
1) Объявление функции в DLL
2) Вызов функции из приложения (D6)
← →
EugeneP (2002-07-18 12:18) [7]По поводу кода
сам код могу дать
а вот вызов к сожалению не из моей проги
вот код
library ext_confo;
uses
ShareMem,
SysUtils,
Windows,
Classes,
Dialogs,
IBDataBase,
IBQuery,
Forms;
{$R *.RES}
function ext_confo_dp // Внешняя функция, вызываемая при подтверждении сделки DEPO
(DB:TIBDataBase; {Компонент доступа в БД. Внимание! Данный компонент не надо открывать, закрывать и т.п.!!!}
AHandle : THandle; {Handle приложения}
ticket : double; {Номер Тикета}
tran : PChar;
r_ticket : PChar; {Номер Тикета REUTERS}
custid : PChar; {Уникальный идентификатор контрагента (таблица customer)}
custname : PChar; {Наименование контрагента }
ccy : PChar; {Валюта}
amount : double;
interest : double;
rate : double; {Курс}
acc_from : PChar; {Оплата со счета}
acc_to : PChar; {Получение на счет}
acc_from_n: PChar; {Номер ностро счета по балансу банка}
acc_to_n : PChar; {Номер ностро счета по балансу банка}
valuedate : TDateTime;{Дата покупки}
valuematurity : TDateTime; {Дата продажи}
tradedate : TDateTime; {Дата продажи}
roll_v_amount : double; {Сумма прологации по valuedate}
roll_m_amount : double; {Сумма прологации по maturity}
roll_v_ticket : double; {Тикет прологации по valuedate} //(-1 - нет тикета) (-2 - из нескольких)
roll_m_ticket : double; {Тикет прологации по maturity }
num_instr : integer; {номер платежной инструкции из таблицы t_cust_payinstr}
swift_confo :pchar {Подтверждение в формате SWIFT}
): integer; stdcall;
var IBQuery_TMP:TIBQuery;
IBTransaction_TMP:TIBTransaction;
begin
// C примером обращения к базе
result:=0;
Application.Handle:=AHandle;
IBTransaction_TMP:=TIBTransaction.Create(Application);
IBQuery_TMP:=TIBQuery.Create(Application);
try
IBTransaction_TMP.Params.Clear;
IBTransaction_TMP.Params.Add("isc_tpb_read_committed");
IBTransaction_TMP.Params.Add("isc_tpb_rec_version");
IBTransaction_TMP.Params.Add("isc_tpb_nowait");
IBTransaction_TMP.Params.Add("isc_tpb_read");
IBTransaction_TMP.DefaultDatabase:=DB;
IBTransaction_TMP.Active:=true;
IBQuery_TMP.DataBase:=DB;
IBQuery_TMP.Transaction:=IBTransaction_TMP;
IBQuery_TMP.SQL.Clear;
IBQuery_TMP.SQL.Add("select * from dp where ticket="+FloatToStr(ticket));
IBQuery_TMP.Open;
result:=0;
MessageDLG("Функция подтверждения DEPO. Для ее реализации обратитесь к Вашим программистам. Контрагент = "+PChar(IBQuery_TMP.FieldByName("custid").Asstring),mtWarning,[mbYes],0);
IBQuery_TMP.Close;
finally
IBQuery_TMP.Free;
IBTransaction_TMP.Free;
end;
//Следующие 2 строки не удалять!!! Они нужны для возврата фокуса приложению
Application.ProcessMessages;
Application.Handle:=0;
end;
function ext_confo_nett // Внешняя функция. вызываемая при печати тикета NETTING
(DB:TIBDataBase;
AHandle : THandle; {Handle приложения}
custid : PChar; {Уникальный идентификатор контрагента (таблица customer)}
custname : PChar; {Наименование контрагента }
// Параметры, относящиеся к сделкам
ticket_array : PChar; {Номер Тикета}
r_ticket_array : PChar; {Номер Тикета REUTERS}
note_array : PChar; {Список описаний сделок. Разделитель "|"}
// Параметры, относящиеся к платежам
p_amount_array : PChar; {Список результирующих сумм. Разделитель "|"}
p_amount_include_array : PChar; {Список сумм, вошедших в неттинг}
ccy_array : PChar; {Список результирующих валют. Разделитель "|"}
ccy_include_array : PChar; {Список валют, вошедших в неттинг (в соответствии с полем p_amount_include_array)}
acc_array : PChar; {Список идентификаторов ностро счетов. Разделитель "|"}
acc_name_array : PChar; {Список наименований ностро счетов. Разделитель "|"}
acc_n_array : PChar; {Список ностро счетов по балансу банка. Разделитель "|"}
payments_tickets : PChar; {Номер тикета нетинга}
p_date_array : PChar; {Список дат валютирования результирующих платежей}
swift_confo : pchar {Подтверждение в формате SWIFT}
): integer; stdcall;
begin
result:=0;
MessageDLG("Вызвана внешняя функция подтверждения тикета NETTING. Для ее реализации обратитесь к Вашим программистам",mtWarning,[mbYes],0);
//Следующие 2 строки не удалять. Они нужны для возврата фокуса приложению
Application.ProcessMessages;
Application.Handle:=0;
end;
exports ext_confo_dp;
end.
← →
EugeneP (2002-07-18 12:20) [8]я немного подправил
там еще функции были
вызывается ext_confo_dp
на остальные тоже были експорты в конце
но я их сейчас убрал
← →
Skier (2002-07-18 12:36) [9]>EugeneP
Я так понял что :
1) ты перекомпилил толко библиотеку (host не менялся)
2) ошибка возникает не в теле DLL-функции, а именно при
её вызове
Так ?
← →
EugeneP (2002-07-18 12:40) [10]Да
хост не менялся
длл компилится нормально
а именно при вызове - ошибка
← →
Skier (2002-07-18 12:46) [11]>EugeneP
Страшные вещи ! :)
Пойдём на ощупь...Попробуй отключить оптимизацию
и перекомпилить DLL. (у меня был случай когда это помогало,
правда это была D3, но попытаться можно.)
← →
EugeneP (2002-07-18 13:34) [12]Не помогло отключение оптимизации :((
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c