Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при загрузке dll 
V
    Опции темы
Andreyzpr
Дата 17.7.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: 1
Всего: 1



Я учусь делать поддержку плагинов, срисовал вот код с drkb только у меня выдает ошибку:
Acess Violation at address 00404228 in module 'Project1.exe'. Read of address 012D0A00
Скажите, где я допустил ошибку..
Вот код dll
Код

library Project2;
uses
  SysUtils,
  Classes;

{$R *.res}

function PluginName:String;
begin
PluginName:='Andrey';
end;

Exports PluginName;
end.


Код программы
Код

procedure TForm1.Button1Click(Sender: TObject);
var
PluginName: function: String;
Handle:THAndle;
begin
Handle:=LoadLibrary('F:\Project2.dll');
if Handle <> 0 then
  begin
    @PluginName:=GetProcAddress(Handle, 'PluginName');
    if @PluginName <> nil then ShowMessage(PluginName);
  end;
FreeLibrary(Handle);
end;

Когда нажимаешь на кнопку, оно сначала выводит имя посредством SHowMessage а после этого уже ошибку выкидывает

PM MAIL WWW ICQ   Вверх
Rennigth
Дата 17.7.2007, 09:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



В uses первым модулем ShareMem добавь.

Это сообщение отредактировал(а) Rennigth - 17.7.2007, 09:46


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Andreyzpr
Дата 17.7.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: 1
Всего: 1



Добавил. Еще хуже. Мало того что та ошибка есть ичсе и появляеться ошибка когда закрываеш програму!
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 17.7.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Andreyzpr, добавить нужно и в dpr программы и в dpr dllки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Andreyzpr
Дата 17.7.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: 1
Всего: 1



Что значит в dpr????
А почему в drkb об этом не указали??
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 17.7.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



dpr - это корневой модуль проекта. 
Цитата(Andreyzpr @  17.7.2007,  18:09 Найти цитируемый пост)
А почему в drkb об этом не указали?? 

Потому что об это говорит нехилая куча текста, которая появляется всякий раз когда создаешь новый проект Dll. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 17.7.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Попробуй добавить  StdCall;
Код

function PluginName:String; StdCall;

PluginName: function: String;  StdCall;

Также если строки не длиньше 255 символов используй заместо String PChar
PM MAIL ICQ   Вверх
Andreyzpr
Дата 17.7.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: 1
Всего: 1



Alexeis, ты на сильно умном языке для меня говориш ;)

ivan219 - Спасибо ;) Просто и понятно показал!! smile ПРитом все работает ;) ПАСИБА ;)
PM MAIL WWW ICQ   Вверх
nmn
Дата 17.7.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(ivan219 @  17.7.2007,  18:27 Найти цитируемый пост)
Также если строки не длиньше 255 символов используй заместо String PChar 

интересно почему это?
PM Skype   Вверх
Alexeis
Дата 17.7.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(nmn @  17.7.2007,  18:49 Найти цитируемый пост)
интересно почему это? 

  Нет такого ограничения.

Цитата(Andreyzpr @  17.7.2007,  18:33 Найти цитируемый пост)
Alexeis, ты на сильно умном языке для меня говориш ;)

  Project->View Source.

C PChar работать просто ужас. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 17.7.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Цитата(Andreyzpr @  17.7.2007,  18:33 Найти цитируемый пост)
Alexeis, ты на сильно умном языке для меня говориш ;)

И вовсе это не так за чем обманываешь smile 
dpr это расширение файла по дефолту это Project1.

dpr фаил в DLL это тот где твой код:
Код

library Project2;

uses ShareMem;

function PluginName: String; StdCall;
begin
 Result:='Andrey';
end;

Exports
 PluginName;
begin 
end.

А dpr в EXE файле это:
Код

program Project1;

uses
  ShareMem,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Вызывается путём нажатия Ctrl+F12 - > (По дефолту это фаил)  Project1

Цитата(Alexeis @  17.7.2007,  19:05 Найти цитируемый пост)
C PChar работать просто ужас.

От части да.

Это сообщение отредактировал(а) ivan219 - 17.7.2007, 20:13
PM MAIL ICQ   Вверх
MetalFan
Дата 17.7.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(Alexeis @  17.7.2007,  19:05 Найти цитируемый пост)
C PChar работать просто ужас.  

Widestring? ;)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.