Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Использование dll


Автор: Volf 13.2.2007, 16:10
Уж звеняйте, если немного не в тему или подобная тема была уже!

Вопрос в следующем: Создаю dll фсё нормально компелится и, естественно, ругается, что не может быть запущено....
Потом в проекте пробую подцепить свою dll, которая лежит в тойже директории, что и exe... Мож я что не понимаю... Хотяб сцылку на ман прикольный дайте.... Особо времени нет в инете лазить.... 

Помогите, заранее спосибки....

Автор: Alexeis 13.2.2007, 16:25
В параметрах запуска, можно указать приложение, которое будет ее загружать, тем самым можно производить ее отладку. Если приложение и библиотека находятся в одной папке и все имена указаны правильно, то загрузка пройдет без проблем. Проверьте все названия функций имя библиотеки.

Автор: Ptica_Oz 13.3.2007, 14:13
написала я длл на VC++ для автоматизации автокада с использованием win api. в правильности работы ф-ций, описаных в длл я уверена. подключила ее к делфи (пишу плагин) и тут такое начилось!!! а именно: ф-ции win api работают не корректно. автоматизация, по крайней мери та, которая описана до проблемной ф-ции работает нормально, но что будет дальше... мысли об этом меня пугают.
в делфях длл ф-цию описываю так:
Код

function ACADPrint (Path : string;
                Color : string;
                Printer : string;
                Text : string;
                Scale : Integer) : Boolean ;stdcall; external 'D:\TextStyle.dll';

люди добрые!!! помогите кто чем может!!!  smile 

Автор: Alexeis 13.3.2007, 14:40
Ptica_Oz, в VC++ функции Dll объявлены как stdcall или по умалчанию? 

Автор: Ptica_Oz 13.3.2007, 14:48
да, как stdcall

Автор: Alexeis 13.3.2007, 14:55
а слона то я и не подметил   smile . Вот оно "Text : string;" 
Делфийский стринг != Сишный стринг. В делфи стринг это длинная строка с со сложной структурой, фактически неявный объект, для использования которого нужен общий с Dll менеджер памяти. Вероятно в VC передавался PChar. Именно его и нужно указывать в качестве параметра прототипа функции в делфи. Вообще параметры string могут передваться только от приложения написанного в делфи к dll написанной также на делфи или наоборот.

Автор: Ptica_Oz 13.3.2007, 15:14
попробую... но мне кажется дело тут не в этом... длл получает параметры (в длл они char *) проблема возникла конкретно при выполнении этой ф-ции:
Код

DocumentProperties( 0,    // hWnd
        hPrinter,
        const_cast<TCHAR *>(pname),
        0,            // DEVMODE output
        0,            // DEVMODE input
        0 );            // mode

до этого полученные параметры использовались успешно, хотя только в ф-циях автоматизации а не в win api ф-циях

З.Ы. hPrinter = 0, pname = имя принтера, то самое, которое передаётся из делфей

З.З.Ы. а самое забавное, что по началу эта ф-ция срабатывала (правда не знаю корректно ли) а вылетала на другой win api-шной ф-ции, которая вызывалась соответственно позже...

Автор: Alexeis 13.3.2007, 16:52
Цитата(Ptica_Oz @  13.3.2007,  15:14 Найти цитируемый пост)
проблема возникла конкретно при выполнении этой ф-ции:

что это за функция? да и вообще при неправельной передаче параметров глюки могут появиться в любом месте

Автор: Ptica_Oz 14.3.2007, 09:35
кажись стало получаться, но возникли проблемы с преобразованием String в PChar. Об этом вhttp://forum.vingrad.ru/topic-140996/0.html#entry1063591

Автор: Ptica_Oz 14.3.2007, 12:38
сделала как вы советывали: передаю PChar. толку ноль. в том же самом месте спотыкается. думаю тут уже в VC++ проблема попробую в другом подразделе вопрос задать... спасибо за помощь.

Автор: Alexeis 14.3.2007, 14:13
Ptica_Oz, попробуйте сделать пустую Dll, которая экспортирует функцию с теми же параметрами. и выводит на экран содержимое переданных параметров. Я поробую написать прогу на делфи, которая заполнит их и вызовет функцию.

Автор: Ptica_Oz 14.3.2007, 14:18
в длл я натыкала MessageBox для контроля происходящего, все параметры передаются нормально. прихожу к выводу что именно с DocumentProperties проблемы...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)