![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
Один товарищ написал на VC++ DLL с единсвенной экспортируемой функцией, которая печатаем растровые файлы на заданный принтер и накладывает на изображение номер. Моя программа (на Delphi 2006) вызывает эту функцию и происходит собственно печать. Загвоздка вот в чём: на моей машине всё работает нормально, на других машинах, на которых установленны D2006 и VS тоже всё нормально. Как только программа запускается на машине, где нет ни того, ни другог дллька перестаёт загружаться. Загружать пробовала и статически и динамически, всё одно. Чего ей не хватает?
З.Ы. товарищ, который написал эту длльку, говорит, что он не виноват и я ему верю |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Что значит не загружается? LoadLibrary что возвращает? Добавлено через 2 минуты и 2 секунды Покажи как загружаешь. Может твоя программа банально не видит файла библиотеки. Пробовал полный путь до dll указывать, а не относительный? -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Ptica_Oz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
загружаю длльку динамически:
объявляю тип:
вызов функции:
пробовала указать полный путь, бесполезно, DLLInstance пустой |
||||
|
|||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Попробуй вот такой код:
Добавлено @ 11:32 Что в результате получится, библиотеку положи вместе с твоим приложением. Это сообщение отредактировал(а) Rennigth - 8.10.2007, 11:33 -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
длльку программа находит, но почему-то не загружает :(
|
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
после вызова LoadLibrary чему равен о значение DLLInstance? Если 0 то что рейзит RaiseLastOSError? -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
на опытной машине (без делфей и VC++) проблему решили установкой visual c++ 8.0 runtime libraries, надеюсь, что этим дело ограниыется
|
|||
|
||||
| Alix |
|
|||
|
L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
плохо dll сделали значит...
-------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Не плохо, а с подключением Run Time библиотек. Для проектов с несколькими исполняемыми модулями это оправдано, так как экономит место на диске. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Alix |
|
|||
|
L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
конечно, но из описания я понимаю, что это не тот случай -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
за проблемой связаной с загрузкой длльки на другой машине не заметила ещё одного бага: на моей машине дллька подгружается и выполняется и потом выгружается (см. код выше), но вот потом при попытки создать экземпляр класса TClientDataSet вываливается ошибка обращения к нулевому адресу. Если длльку подгружать, но функцию не вызывать, то всё работает...
В результате пршли к решению переписать эту функцию на делфях. Это уже вторая моя попытка подключить длльку, написаную на VC++, к делфям и опять неудачная (о первой попытке говориться тут). Может у кого есть опыт таких махинаций и может дать общие рекомендации по написанию длльек на VC++ так, что бы они без проблем цеплялись к делфям? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ptica_Oz, Dll ка существует в адресном пространстве программы, так что любые ошибки в ней могут сказываться на работе всего приложения. Думаю ошибка как раз в Dll.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Никаких здесь нет рекомендаций. Если криво dll написана то здесь уже ничего не поделаешь. Она не будет работать и из любого приложения, не зависимо на делфях она написана или просто из rundll вызывается процедура...
имхо не верь -------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
На самом деле на другом может и сработать, все зависит от случая и от различных факторов. Некоторые ошибки часто остаются незамеченными, так как не вызывают вылет тестового приложения. Т.е. может происходить запись по чужому адресу, но там мог оказаться баласт или что-то не очень важное. У другой программы, на том же месте может оказаться что-то жизненно важное или тот участок памяти может быть вообще не выделенным, потому обращение и вызывает AV. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
переписали функцию, теперь она оформлена в ехе файл, пошла ставить на пустые машины, не получилось. visual c++ 8.0 runtime libraries, которую я поставила в первый раз, не давал нужного результата. сисадмин раздобыл другую, я её поставила и всё заработало. Вывод: корявая была visual c++ 8.0 runtime libraries. вопрос счетаю закрытым.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |