Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-94165
Макс Реалов
2004-02-03 18:23
2004.02.29
В чём разница?


1-93887
Serge
2004-02-16 09:42
2004.02.29
32 x 16 Icon in TrayBar


4-94238
Eagle Owl
2003-12-16 22:24
2004.02.29
Сжатие файла...


1-93910
Yurasikombo
2004-02-15 17:58
2004.02.29
Как программно отключить и включить отображение рисунков IE


1-93949
Grihan
2004-02-17 17:53
2004.02.29
ModalResult





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский