WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Просветите глупого.

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Просветите глупого.
Kosha опубликован 24-07-2001 22:54 MSK   Click Here to See the Profile for Kosha   Click Here to Email Kosha  
Вот хочу Shared DLL memory сделать.
В коде ДЛЛ поместил

#pragma data_seg(".DataSection")
unsigned char *Data=NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.DataSection,rws")


Вот. Сделал LoadLibrary, а как добраться до этой Data - не знаю ;-(((((

DenizK опубликован 24-07-2001 23:25 MSK     Click Here to See the Profile for DenizK  Click Here to Email DenizK     
То что ты написал применяется для того, чтоб несколько экземпляров ОДНОЙ EXE/DLL разделяли переменную (в данном случае - Data). И до неё не нужно добираться - её используешь как обычнцю переменную. Если же тебе надо организовать информационный обмен между РАЗНЫМИ exe/dll то для этого имхо используют отображаемые в память файлы.
Kosha опубликован 25-07-2001 01:04 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Неее.
Я не про это.
У меня есть DLL. В ней (см. выше) объявлена как Read/Write/Shared секция.
И я хочу из 2х процессов использовать shared переменные, объявленные в этой секции.

GetProcAddress с указанием ее имени говорит, что ее нету. Оно и понятно - как dllexport она не стоит...

А вот как до этой секции добраться - ума не приложу ;-)))))))))

Kosha опубликован 25-07-2001 01:09 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
т.е. два процесса загружают эту DLL, и я хочу некоторой синхронизации.

Точнее, всё, что надо - получить выход WinAmp'а.

Ничего умнее не нашел, как написать Visualization plugin. Раньше делал передачу данных из этой DLLки все через FindWindow/WM_USER/WM_COPYDATA, но глюки и тормоза получаются.

А если в самой DLL как-нить расшарить ту структуру, куда Winamp передает данные, загрузить этот же плагин в прогу, то на порядок возрастет скорость и уберутся глюки.

Kosha опубликован 25-07-2001 01:12 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Вообще-то тут можно и отображаемыми файлами расшарить, но как-то есть DLL, и интуитивный способ - именно так.

К тому же, для общепознавательных целей - полезно.

OlegO опубликован 25-07-2001 10:38 MSK     Click Here to See the Profile for OlegO  Click Here to Email OlegO     
Доступ к переменной можно сделать за счет введения get, set ф-й. (Извеняюс за плагиат примера, но больно он короток :) а самому писать лень :))

DLL *.cpp >>
#pragma data_seg(".ASHARE")
int sharedarray[100] = { 0, 0}; // some init
#pragma data_seg()

__declspec(dllexport) int getvalue(int index)
{
return sharedarray[index];
}

__declspec(dllexport) void setvalue(int index,int v)
{
sharedarray[index]=v;
}

__declspec(dllexport) void *getaddr(void)
{
return (void *)sharedarray;
}

Ispolzovanie>>
#include <stdio.h>
#include <string.h>

__declspec(dllimport) int getvalue(int index);
__declspec(dllimport) void setvalue(int index,int v);
__declspec(dllimport) void *getaddr(void);


void main()
{
char buf[256];
int index,v;
printf("Enter quit to exit\nTo set value: xx=vv\nTo read value: ?xx\n");
printf("Array address=%x\n",(long)getaddr());
do {
gets(buf);
if (sscanf(buf,"%d=%d",&index,&v)==2)
{
setvalue(index,v);
printf("Set!\n");
}
else if (sscanf(buf,"?%d",&index)==1)
printf("%d\n",getvalue(index));
else if (strcmp(buf,"quit"))
printf("Huh? Type quit to quit.\n");
} while (strcmp(buf,"quit"));
}

Проблем не должно быть но могу кинуть готовый проект.

Kosha опубликован 25-07-2001 22:24 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Thz, попробую...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.