как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 08:39
Оценка:
необходимо загрузить dll одним процессом
т.е. чтоб работало ЭТО

HINSTANCE h1 = LoadLibrary("1.dll");
HINSTANCE h2 = LoadLibrary("1.dll");
ASSERT(h1==h2);


разные пользователи или копию dll не предлогать
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re: как загрузить DLL одним процессом?
От: sercher Украина  
Дата: 09.06.03 08:48
Оценка:
СГ>
СГ>HINSTANCE h1 = LoadLibrary("1.dll");
СГ>HINSTANCE h2 = LoadLibrary("1.dll");
СГ>ASSERT(h1==h2);
СГ>


А в чём проблема? Нельзя чтоб хэндлы были одинаковые? Тогда линкуй статически.
Re: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 08:48
Оценка:
Здравствуйте, Сергей Глазунов, Вы писали:

СГ>необходимо загрузить dll одним процессом

СГ>т.е. чтоб работало ЭТО

СГ>
СГ>HINSTANCE h1 = LoadLibrary("1.dll");
СГ>HINSTANCE h2 = LoadLibrary("1.dll");
СГ>ASSERT(h1!=h2); // сорри.. ;)
СГ>


СГ>разные пользователи или копию dll не предлогать
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[2]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 08:50
Оценка:
Здравствуйте, sercher, Вы писали:



СГ>
СГ>HINSTANCE h1 = LoadLibrary("1.dll");
СГ>HINSTANCE h2 = LoadLibrary("1.dll");
СГ>ASSERT(h1!=h2);
СГ>


S> А в чём проблема? Нельзя чтоб хэндлы были одинаковые? Тогда линкуй статически.


статически нельзя (процесс ничего не знает о существовании dll) в том-то и проблема — нужно динамически
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[2]: как загрузить DLL одним процессом?
От: sercher Украина  
Дата: 09.06.03 08:52
Оценка:
Попробуй LoadLibraryEx() с разными флагами.
Re: как загрузить DLL одним процессом?
От: Vamp Россия  
Дата: 09.06.03 08:56
Оценка:
А зачем? Уверен, что проблема решается более ...гм... стандарными средствами.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 08:58
Оценка:
Здравствуйте, Vamp, Вы писали:

V>А зачем? Уверен, что проблема решается более ...гм... стандарными средствами.


какими?
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[3]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 09:08
Оценка:
Здравствуйте, sercher, Вы писали:



S>Попробуй LoadLibraryEx() с разными флагами.


Они безполезны и касаются другого...
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[3]: как загрузить DLL одним процессом?
От: SWW Россия  
Дата: 09.06.03 09:45
Оценка:
Здравствуйте, Сергей Глазунов, Вы писали:

СГ>Здравствуйте, Vamp, Вы писали:


V>>А зачем? Уверен, что проблема решается более ...гм... стандарными средствами.


СГ>какими?


Сначала опиши проблему. Зачем тебе нужно непременно h1==h2?
Re[3]: как загрузить DLL одним процессом?
От: sercher Украина  
Дата: 09.06.03 09:46
Оценка:
  HANDLE h1,h2;
 
  h1 = LoadLibraryEx("c:\\winnt\\system32\\ddraw.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
  h2 = LoadLibraryEx("c:\\winnt\\system32\\ddraw.dll", NULL, 0);


Чем не устраивает?
Re: как загрузить DLL одним процессом?
От: Аноним  
Дата: 09.06.03 10:39
Оценка:
Здравствуйте, Сергей Глазунов, Вы писали:

[skip]

Я считаю — что этот вопрос надо поместить в раздел — как задать вопрос — что-бы на него нельзя было ответить .

Когда уж начятся задавать нормально вопросы — а не в духе M$ — "Не стоит — поставьте !!!" (а что, где, куда и когда) сами придумывайте и ведь народ начинает отвечать ставить, рекомендовать ....
Re[3]: как загрузить DLL одним процессом?
От: Vamp Россия  
Дата: 09.06.03 10:41
Оценка:
Здравствуйте, Сергей Глазунов, Вы писали:

СГ>какими?

Так задача-тио какая? Зачем загружать DLL два раза?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 10:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я считаю — что этот вопрос надо поместить в раздел — как задать вопрос — что-бы на него нельзя было ответить .


А>Когда уж начятся задавать нормально вопросы — а не в духе M$ — "Не стоит — поставьте !!!" (а что, где, куда и когда) сами придумывайте и ведь народ начинает отвечать ставить, рекомендовать ....


а я думаю, что флейм раздувать здесь ни к чему...

вопрос был нормально задан "нужно обеспечить работу кода"
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[4]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 10:51
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Здравствуйте, Сергей Глазунов, Вы писали:


СГ>Здравствуйте, Vamp, Вы писали:


V>>А зачем? Уверен, что проблема решается более ...гм... стандарными средствами.


СГ>какими?


SWW>Сначала опиши проблему. Зачем тебе нужно непременно h1==h2?


У меня имеется процесс, который загружает dll (любые), процесс может загрузить несколько раз одну и ту же dll (более чем два раза(!), здесь не работает случай с употреблением флага LOAD_LIBRARY_AS_DATAFILE).

Вопрос есть ли какие-то флаги котрые в dll, процессе еще что-нибудь, чтобы ниже код работал(!)

//где-то const int nNum = 4;
HINSTANCE h[nNum];

for(int i = 0 ; i < nNum ; i++ ){
h[i] = LoadLibrary("1.dll");
}

for( i = 0 ; i < nNum ; i++ ){
for(int j = i+1 ; j < nNum ; j++ )
ASSERT( TRUE == (h[j] != h[i]) ); // должны быть разными!
}

вопрос не в проектировании...
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[4]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 10:55
Оценка:
Здравствуйте, sercher, Вы писали:



S>
S>  HANDLE h1,h2;
 
S>  h1 = LoadLibraryEx("c:\\winnt\\system32\\ddraw.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
S>  h2 = LoadLibraryEx("c:\\winnt\\system32\\ddraw.dll", NULL, 0);
S>


S> Чем не устраивает?

спасибо за ответ, но... это работает для 2-х, а для, скажем 4-х?

Я попробую немного описать проблему:

У меня имеется процесс, который загружает dll (любые), процесс может загрузить несколько раз одну и ту же dll (более чем два раза(!), здесь не работает случай с употреблением флага LOAD_LIBRARY_AS_DATAFILE).

Вопрос: есть ли какие-то флаги котрые в dll, процессе еще что-нибудь, чтобы ниже код работал(!)

//где-то const int nNum = 4;
HINSTANCE h[nNum];

for(int i = 0 ; i < nNum ; i++ ){
h[i] = LoadLibrary("1.dll");
}

for( i = 0 ; i < nNum ; i++ ){
  for(int j = i+1 ; j < nNum ; j++ )
    ASSERT( TRUE == (h[j] != h[i]) ); // должны быть разными!
}


вопрос не в проектировании...
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[4]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 10:59
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Здравствуйте, Сергей Глазунов, Вы писали:


СГ>какими?

V>Так задача-тио какая? Зачем загружать DLL два раза?

MDI приложение загружает несколько раз dll... Возникает проблема со статическими данными в dll.

DLL писалась не мной, модифицироваться мной не может, но должна работать как???
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Re[5]: как загрузить DLL одним процессом?
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 09.06.03 11:05
Оценка:
Здравствуйте, Сергей Глазунов, Вы писали:

[]

Одна и таже DLL не может присутствовать в адресном пространстве процесса более чем один раз. Но

Note that two DLLs that have the same base file name and extension but are found in different directories are not considered to be the same DLL.

Re[3]: как загрузить DLL одним процессом?
От: sercher Украина  
Дата: 09.06.03 11:05
Оценка:
Не понял, так вызывай хоть 5 раз с параметром LOAD_LIBRARY_AS_DATAFILE, хэндл будет каждый раз разным.
Re[5]: как загрузить DLL одним процессом?
От: Vamp Россия  
Дата: 09.06.03 11:06
Оценка:
А зачем загружать одну и ту же DLL два раза? Вот чего я никак не могу понять.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: как загрузить DLL одним процессом?
От: Сергей Глазунов Украина  
Дата: 09.06.03 11:15
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, Сергей Глазунов, Вы писали:


AS>[]


AS>Одна и таже DLL не может присутствовать в адресном пространстве процесса более чем один раз. Но

AS>

AS>Note that two DLLs that have the same base file name and extension but are found in different directories are not considered to be the same DLL.


спасибо, thanks
... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.