Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Вниз
Ошибка в Делфи 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c