Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Ошибка в Делфи 5   Найти похожие ветки 

 
UNIVERSAL   (2003-12-22 09:08) [0]

Доброе время суток, коллеги. Ситуация такая. В основном мы пишем на VB, но в VB DLL-ки получаются не совсем "правильные". Так вот понадобилось написать библиотеку на Delphi. В ней только одна функция, которая конвертирует текстовый файл из DOS-кодировки в WIN-кодировку. Вот собственно код DLL:

library FileConverter;
{$DEFINE OEMToChar}
{$IOCHECKS OFF}

uses
SysUtils,
Classes,
windows,
Messages ;

function FileOEMToChar(const FileName:string):integer;stdcall;
var S,Dest:PChar; FSrc,FDst:Text;Path,str:string;//r:bool;
begin
// try
{$IOCHECKS OFF}

FileOEMToChar:=0;
AssignFile (FSrc,FileName);
Reset(FSrc);
Path:=ExtractFilePath(FileName);
AssignFile (FDst,Path+"\001.txt");
Rewrite(FDst);

while not EoF(FSrc) do
begin
readln(FSrc,str);
s:=Pchar(str);
OemToCharA(S, Dest);
str:=String(dest);
writeln(FDst,Dest);
end;
// finally
CloseFile(FSrc);
CloseFile(FDst);
DeleteFile(Pchar(FileName));
RenameFile(Path+"\001.txt",FileName);
// end;
end;
exports
FileOEMToChar;
begin
end.

Компилируется без ошибок, но при вызове из кода программы на VB или VBA генерирует ошибку - Can"t find DLL entry point FileOemToChar in FileConverter.DLL , при этом процедура не отрабатывает.
При переносе процедуры в приложение делфи и трассировке, процедура выполняется полностью, обрабатыавает файл, но в конце трассировки выдаёт сообщение об ошибке: ....Fccess violation at address ... in module Project1.exe. Read of address ...
Не могу понять в чём дело? DLL-ка очень простая, но откуда эта ошибка. Если кто может выполните у себя. Может с Делфи у меня что? А может с головой - давно на Дефях не программировал. Заранее спасибо.


 
Digitman ©   (2003-12-22 09:45) [1]

1. Имена экспортируемых идентификаторов регистрочувствительны

Ид-р в библ-ке фигурирует как FileO EMToChar, а ты пытаешься его искать как FileO emToChar

2. Работать это в VB не будет.

Библ.ф-цию в Делфи нужно декларировать как

function FileOEMToChar(const FileName: PChar):integer;stdcall;

а в VB объявлять ByVal FileName as String


 
UNIVERSAL   (2003-12-22 10:26) [2]

Спасибо попробую


 
Плохиш_   (2003-12-22 10:33) [3]

3. Кто за тебя память для переменной Dest распределять будет?


 
UNIVERSAL   (2003-12-22 11:08) [4]

2 Плохиш_ по-подробней в этом месте, плз.
2 Digitman - работает, но не совсем удачно, хотя ещё не думал над этим подробно. процедура полностью отрабатывает, файл в нормальном состоянии, но акцесс впадает в даун, т.е. вываливается.
какие полезные мысли ещё будут?


 
Плохиш_   (2003-12-22 11:18) [5]


> UNIVERSAL (22.12.03 11:08) [4]
> 2 Плохиш_ по-подробней в этом месте, плз.

PChar + F1, GetMem, FreeMem


 
Digitman ©   (2003-12-22 11:24) [6]


> какие полезные мысли ещё будут?


для начала ответь себе на вопрос [3] и наведи порядок с распределением памяти в ф-ции

а потом уж про "даунов" поговорим)


 
KADAN   (2003-12-22 23:05) [7]

2 Digitman, UNIVERSAL

а я делаю ето с помощью NEW и reallocmem... я неправ?


 
SPeller ©   (2003-12-23 04:03) [8]

А вроде бы всё нормально у него с пямятью. Или строка s = PChar( str ); создаёт отдельный блок памяти с содержимым, равным str, или же просто возвращает указатель на первый символ строки?


 
X-MAN   (2003-12-24 03:48) [9]

В exprots тоже пиши stdcall


 
Digitman ©   (2003-12-24 08:19) [10]


> X-MAN (24.12.03 03:48) [9]
> В exprots тоже пиши stdcall


это еще зачем ?



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-93930
anod
2004-02-15 00:43
2004.02.29
Create form


1-93980
Biji
2004-02-17 12:42
2004.02.29
Что за фича с FileListBox?


1-93898
Tatyana
2004-02-16 00:37
2004.02.29
Событие.


11-93830
BaRToV
2003-06-12 03:03
2004.02.29
XHelpGen & xHelpGenCm


1-93978
HF-Trade
2004-02-17 12:57
2004.02.29
После Append текст теряет формат...