[ Mikky @ 24.04.2002. 23:53 ] @
imam program koji nema prozore
znaci nema registrovanje klasa, CreateWindow i ostalih stvari vezano za to
znaci nemou da primam poruke WM_
imam i dll kojeg ucitava taj program

e sad problem je sledeci
hocu da posaljem iz dll-a poruku u main thread mog programa
znaci poruka se nesalje u wndproc
vec se obradjuje ovako

Code:

MSG msg;

while(1)
{
   GetMessage(&msg,0,0,0)
   if (msg.message == WM_USER+100)
   {
      // DO STUFF 
   }
}


(ovde nije potreban DispatchMessage() jer nemam wndproc proceduru)

a iz dll-a poruku u exe saljem preko PostThreadMessage()
prvi parametar ove fje je thread ID
to treba da bude thread ID od mog WinMain() threada u .exe
to sam uzeo preko GetCurrentThreadId() i poslao dll-u jos u inicijalizaciji kao parametar neke funkcije

da li je u opste moguce slati thread poruke izmedju dll-a i exe-a ??
eh valjda me je neko shvatio sta pokusavam
[ Dragi Tata @ 25.04.2002. 00:07 ] @
Možda glupo pitanje, ali da li ti uopšte startuješ nov thread u tvom dll-u? To što je neka funkcija u dll-u ne znači da će se izvršavati u posebnom thread-u nego main.
[ Mikky @ 25.04.2002. 15:39 ] @
ne ne pogresno si razumeo, mozda sam ja malo zakomplikovao celu pricu ali u sustini je prosto

sve sto ja hocu je da iz dll-a posaljem poruku u WinMain() thread u .exe
znaci preko funkcije PostThreadMessage
ali nesto mi neide...da li je to u opste moguce i kako
(threadId WinMain-a sam prosledio dll-u preko neke druge funkcije kao parametar kako bi funkcija PostThreadMessage() ciji je to prvi parametar znala kom threadu da posalje)
[ Ivan Dimkovic @ 25.04.2002. 16:50 ] @
Nisi bas najjasnije rekao to sto hoces da uradis

Mislim da PostThreadMessage radi uz odredjene uslove - procitaj MSDN dokumentaciju kako da pravilno izvedes tu vrstu komunikacije.

[ Dragi Tata @ 25.04.2002. 17:03 ] @
Citat:
Mikky:
sve sto ja hocu je da iz dll-a posaljem poruku u WinMain() thread u .exe
znaci preko funkcije PostThreadMessage


Ama, ne razumem te ništa. Kada startuješ program, imaš samo jedan thread i taj se startuje upravo od WinMain(). Odatle možeš da startuješ nove thread-ove, čija entry funkcija može (i ne mora) da bude definisana u nekom dll-u. Ako ne startuješ eksplicitno nove thread-ove iz glavnog thread-a, onda imaš single-threaded aplikaciju i PostThreadMessage nema nikakvog smisla. Nedavno sam napisao jedan primer koji koristi PostThreadMessage i ako hoćeš poslaću ti ga (kad ga nađem).
[ Ivan Dimkovic @ 25.04.2002. 23:59 ] @
Evo odgovora na sva tvoja pitanja :)

Attachovan uz poruku :)

Hehehe...


Mikky - slucajno sam obrisao tvoju poruku zato sto sam slucajno pritisnuo delete dugme - svejedno, odgovor na tvoj problem je ukljucen u ovu poruku - nadam se da neces zameriti :)

Pitanje je bilo da li neka globalna promenljiva moze biti vidljiva iz DLL fajla - odgovor je - moze, a u primeru imas kako se to radi.

PS.. hm.. kad malo bolje razmislim, evo i ovako - da se vidi:

Dakle, recimo da hocemo da koristimo neki memory array iz DLL-a koristimo u EXE fajlu:

moj_dll.c
Code:

#include <windows.h>

__declspec(dllexport)char tmpArray[256];

__declspec(dllexport)void neka_moja_funkcija_sto_radi_nesto() { /* bla */ }


moj_exe.c
Code:

#include <stdio.h>

__declspec(dllimport)char tmpArray[256];

void main()
{
  sprintf(tmpArray, "Zdravo, svete!\n");
  printf(tmpArray);
}



cl /LD moj_dll.c
cl moj_exe.c -link moj_dll.lib

Eto.. to je najprostije moguce - bices u mogucnosti da koristis array definisan u DLL fajlu iz tvog EXE fajla. Meni ovo lici na najprljaviji nacin programiranja i ako budes radio multithreaded aplikaciju 101% ces zaglaviti sa nekim deadlock problemom, ili thread-unsafeness ponasanjem tvoje aplikacije - ovo izbegavaj maksimalno.