Страница 1 из 1
Dll и проблемы
Добавлено: 27 дек 2005, 18:41
Sheinina
Сделали свою dll-ку (первый опыт!), положили в EXE,
в проекте прописано:
procedure fontReplace(String); external 'changeFont.dll';
в фейсе вызывается:
fontReplace(path_to_file+'badge.rtf');
при попытке запуска выходят два сообщения
"Приложению не удалось запуститься, поскольку borlnmdmm.dll не был найден. Повторная установка приложения может исправить эту проблему. "
и
"Не загрузилась динамическая библиотека changeFont.dll: не найден указанный модуль"
Где искать решение проблемы?
Добавлено: 28 дек 2005, 08:46
Goblin
Проверьте галочки линкера при сборке DLL ...
В частности , вкладка Packages - убрать галку Build with runtime packages
еще мастер там вставляет комментарий
To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters
в самой DLL как описана функция , в частности какой тип параметра ?
Добавлено: 28 дек 2005, 11:42
edward_K
или borlnmdmm.dll тоже положить в exe
Добавлено: 28 дек 2005, 14:20
Sheinina
Dll-ку пересобрали, но, похоже, неправильно что-то с параметрами.
На всякий случай заголовок процедуры из дельфийского текста:
procedure FontReplace(FileName: PChar ); safecall; export;
Похоже, она не воспринимает имя файла...
Добавлено: 29 дек 2005, 05:55
san
может предается объект pfield а вы его pchar хотите
Добавлено: 29 дек 2005, 12:00
AlexPK
Выложите полный текст своей библиотеки и файла проекта галактики, постраюсь помочь
Добавлено: 29 дек 2005, 12:02
Goblin
Моя DLL, работает 100 % не первый уже год, параметры ShortString'ом передаю
Код: Выделить всё
library UserFunc;
uses
SysUtils,
Windows,
Classes,
NMSMTP;
procedure SendMList(FileName,Addr,TabNum:shortstring);forward;
exports SendMList name 'SENDMLIST'{Отсылка расчетных листов};
{$R *.res}
procedure SendMList(FileName,Addr,TabNum:ShortString);
var
Mail:TNMSMTP;
UserName:array [0..33] of char;
NameLength:DWord;
begin
NameLength:=32;
GetUserName(UserName,NameLength);
Mail:=TNMSMTP.Create(Nil);
with Mail do
begin
Host:='BPMail1';
PostMessage.FromName:='Расчетная группа бухгалтерии';
UserID:=UserName;
Charset:='Windows-1251';
PostMessage.Subject:='Расчетный листок по зарплате(для таб. № '+TabNum+')';
PostMessage.Attachments.Add(FileName);
PostMessage.FromAddress:=UserName+'@blablabla.ru';
PostMessage.ToAddress.Add(Addr);
PostMessage.Body.Add('Согласно действующему трудовому кодексу');
PostMessage.Body.Add('предоставляем Ваш расчетный лист.');
PostMessage.Body.Add('По всем вопросам обращаться по телефону.');
PostMessage.Body.Add('79-29-31(59-31) - расчетная группа.');
end;
try
begin
Mail.Connect;
Mail.SendMail;
end;
finally
begin
if(Mail.Connected) then Mail.Disconnect;
Mail.Free;
end;
end;
end;
end.
Добавлено: 30 дек 2005, 12:17
mik
убери в в uses sharemem
BORLNDMM.dll, если мне не изменяет память, есть борланд мемори манагер...
либо есть другой вариант. просто кинь эту длл куда нибудь типа Windows\system или в каталог exe.
и кроме того, функция должна быть не SafeCall а Register
Добавлено: 10 янв 2006, 14:45
Sheinina
Спасибо всем...