Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

EXE, DLL и ShareMem [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

Mielofon ©   (2005-01-24 09:01:00) 

Добрый день.

Проблема у нас в следующем:
Есть EXE который собран без ShareMem. И есть DLL (плугин например) которую надо бы подключить к этому EXE и который имеет ShareMem.
Так вот если в EXE нет ShareMem-а, то в конструкции
 h := LoadLibrary('d:\DLLka.DLL');
 FreeLibrary(h);
падаем на FreeLibrary :-(
Что делать?
Неиспользовать ShareMem мы не можем. Хотя согласны, что можно использовать альтернативу ему (commm.pas, ShareMemRep.pas), но ничего хорошего не нашли.
Все таки:
1. Можно ли заставит работать связку EXE-БезShareMem + DLL-ShareMem?


jack128   (2005-01-25 19:40:00) [1]

Mielofon   (25.01.05 18:13) [33]
"Использование Дельфи без, по крайней мере, двух апдейт паков считаю извращением"(с) почти Romkin ;-)


Mielofon   (2005-01-25 18:13:00) [2]

У меня D7, WinXP падает и не только у меня :-(


jack128   (2005-01-25 18:01:00) [3]

Delphi5 UP1, Win2k SP3


Mielofon   (2005-01-25 17:51:00) [4]

Как так?
Какая версия Delphi и Windows?


jack128   (2005-01-24 19:13:00) [5]

Mielofon
У мя твой тестовый проэкт работает абсолютно нормально.

program Project1;
uses
 SysUtils,
 Windows;

var
h: THandle;
begin
try
  h := LoadLibrary('TestDll1.dll');
  Win32Check(h <> 0);
  Win32Check(FreeLibrary(h));
except
  on E: Exception do
     MessageBox(0, PChar(E.ClassName+': '+ E.Message), nil, 0);
end;
end.

library TestDll1;

uses
 ShareMem,
 SysUtils,
 Classes;

{$R *.RES}

begin
end.


Digitman   (2005-01-24 15:25:00) [6]


> От чего шли к тому и пришли :-(


тотому что ты не слушаешь ни шиша что тебе говорят.
убедись что "не твой ЕХЕ" собран с ран-тайм пакетами

если так , то выкинь все шаромемы изо своих плагинов и засим успокойся - все будет работать как положено

если не так, то или выкинь этот ЕХЕ в мусор или бомби его разработчиков на предмет или пересборки ихнего ЕХЕ с ран-тайм пакетами или включения шаромема в их проект


Mielofon   (2005-01-24 15:11:00) [7]

От чего шли к тому и пришли :-(

Не мой это EXE. Не могу я в нем ShareMem поставить.
А в своей DLL слишком дорого убирать ShareMem.

Нескромный вопрос: что такое BwRTP?


Digitman   (2005-01-24 15:07:00) [8]


> Mielofon   (24.01.05 14:51) [26]


добавь sharemem в uses вызывающего dpr и не мучайся.
или поубирай все sharemem изо всех dpr и собирай все проекты с BwRTP


Mielofon   (2005-01-24 14:51:00) [9]


> да нахрен мне твои картинки разглядывать !
> у меня что, траффик резиновый ?
> ты что, не в состоянии привести ПОЛНЫЙ текст сообщения об
> исключении ?

не шуми..
Я почти все что написано уже написал.

Окошко значит такое:
В заголовке окна "Project1.exe - ошибка приложения."
В самом окошке:
"
Инструкция по адресу "0x00000000" обратилась по адресу "0x00000000". Память не может быть "read"
"OK" -- завершение приложения
"Отмена" -- отладка приложения
"
ну и соответственно 2 кнопки Ok и Отмена


> вывод некоего мод.диал.окна ты считаешь "падением" ?!

Что значит некоего? Если окошко не мое (а исходники я полностью опубликовал), и оно сообщает что приложение будет закрыто, то это ли ни есть падение?


Mielofon   (2005-01-24 14:42:00) [10]


> А если в примере из
> [15] Mielofon   (24.01.05 11:42) хост-приложение сделать
> таким:

Те же яйца.
Я же говорю, что LoadLibrary проходит на ура. Падает на FreeLibrary


Digitman   (2005-01-24 13:35:00) [11]


> http://RealMielofon.narod.ru/pics/Error1.JPG


да нахрен мне твои картинки разглядывать !
у меня что, траффик резиновый ?
ты что, не в состоянии привести ПОЛНЫЙ текст сообщения об исключении ?
вывод некоего мод.диал.окна ты считаешь "падением" ?!


KSergey   (2005-01-24 13:30:00) [12]

А если в примере из
[15] Mielofon   (24.01.05 11:42) хост-приложение сделать таким:

program Project1;

uses
SysUtils,
Windows;

var
h: THandle;
begin
{ TODO -oUser -cConsole Main : Insert code here }

h := LoadLibrary('TestDll1.dll');
if Integer(h)  = 0 then
    ShowMessage ('Фигня какая-то')
else
    FreeLibrary(h);
end.

Что получится?


Mielofon   (2005-01-24 13:22:00) [13]


> А если проверить чему вообще-то равно h? И нет ли в нем
> признака ошибки?

Нормальный там хэндл.


> Да, в таком виде не должно глючить.

Ну вот у меня: XP, D7. И падает на FreeLibrary.


>Путь рекомендую указывать
> полный во избежание ошибок на клиентских машинах.
Это ж только пример - тут ничего не запускается :-)


> и что значит "падает" ?

http://RealMielofon.narod.ru/pics/Error1.JPG
память 0x0000000 не может быть read.


Digitman   (2005-01-24 12:21:00) [14]


> падает на FreeLibrary(h)


и что значит "падает" ?


REA   (2005-01-24 12:17:00) [15]

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


KSergey   (2005-01-24 12:09:00) [16]

А если проверить чему вообще-то равно h? И нет ли в нем признака ошибки?


Mielofon   (2005-01-24 12:05:00) [17]


> еще раз - проблема у тебя в коде самой ДЛЛ, а не в коде,
> который ее грузит и тут же выгружает ! И Sharemem либо его
> отсутствие здесь абсолютно ни при чем.

А я код привел. Где там ошибка? (именно вариант EXE без ShareMem, DLL с ShareMem)


Digitman   (2005-01-24 11:56:00) [18]


> Mielofon   (24.01.05 11:42) [15]


еще раз - проблема у тебя в коде самой ДЛЛ, а не в коде, который ее грузит и тут же выгружает ! И Sharemem либо его отсутствие здесь абсолютно ни при чем.


Mielofon   (2005-01-24 11:44:00) [19]


> А если честно - вообще есть уверенность, что dll написаны
> корректно? ;)

Что значит корректно?
То что связка EXE-Sharemem (2штуки) + RTS-Sharemem (3 основных, + дополнительные пользователи пишут) работает, можно считать, что "dll написаны корректно?"


Mielofon   (2005-01-24 11:42:00) [20]


> и это - ОДНОЗНАЧНО проблема разработчика той ДЛЛ, которую
> пытаются загрузить/выгрузить. Т.е. твоя проблема.

Был бы я тут если бы проблем не было :-(


program Project1;

uses
 SysUtils,
 Windows;

var
 h: THandle;
begin
 { TODO -oUser -cConsole Main : Insert code here }

 h := LoadLibrary('TestDll1.dll');
 FreeLibrary(h);
end.

//
library TestDll1;

uses
 ShareMem,
 SysUtils,
 Classes;

{$R *.res}

begin
end.


падает на FreeLibrary(h);

Т.е. получается, что DLL с ShareMem можно приципить только к EXE с Sharemem? Никак это обойти нельзя?

Попытались воспользоваться Commm.pas ( http://members.chello.nl/t.koning8/commm.pas)
purpose: Simple COM based memory manager replacement, tested for Delphi 4-7
Под Delphi падает при выходе :-(
Хотя если просто запускаем, то выходит без шума.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо