Страница 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
Спасибо всем...