[ inostranac @ 30.03.2008. 01:22 ] @
Pozdrav svima!

Evo, ovako stoje stvari:

Imam par dll-ova i glavni program koji radi sa njima kao pluginovima (ucita sve dll-ove koji se nalaze u odredjenom direktorijumu...). Sve sam ih pravio kao Regular DLL with shared MFC DLL. Naravno, to sve ne funkcionise na kompu koji nema instaliran MFC. Problem je sto sam pokusao da na takvoj masini iskopiram sve moguce i nemoguce dll-ove u direktorijum sa programom ali i dalje ne radi. Stalno izbacuje poruku Error executing program.

Onda sam pokusao da sve preuredim u MFC statically linked (ukljucujuci i glavni program). Naizgled se sve lepo ucita, ali pri prvom pokusaju (na bilo kom kompu) da pozovem neku funkciju iz dll-a program se prekida sa obavestenjem tipa corrupted heap address. (Pri dinamickom povezivanju sa MFC-om na mom kompu sve radi savrseno).

Da li neko zna u cemu bi mogao da bude problem i kako da ga resim?

Hvala unapred!
[ milanche @ 30.03.2008. 04:58 ] @
Citat:
Naravno, to sve ne funkcionise na kompu koji nema instaliran MFC


Ako si ih kompajlirao u Debug verziji, dobices upravo to sto si opisao. Ako bi probao
da ih kompajliras u Release verziji, trebale bi da rade i bez instaliranog VisualStudio-a.

U principu se preporucuje da i aplikacija i DLL-ovi budu oba Release ili oba u Debug verziji.
Video sam nekoliko gadnih problema koji nastaju ako je aplikacija Debug a DLL Release
(a cini mi se i kod obratne kombinacije).
[ deerbeer @ 30.03.2008. 10:20 ] @
Kad radis sa MFC DLL imas 2 opcije :
1)Shared MFC ( onda sa aplikacijom isporucujes MFC Redistributable Package .. pogledaj na msdn-u).
Nikako ne dolazi u obzir kopiranje "mogucih i nemogucih" dll na klijentsku masinu (napravices haos)
2)Static linked MFC (DLL-ovi su veci al klijent ne mora da ima instaliran MFC package ) .

Sto se tice "corrupted heap address" probaj na tvojoj masini da ti radi u Release verziji u oba slucaja (DLL i EXE)
Jer veoma moguce je da si probao Debug verziju na svojoj masini pa onda release verziju na drugoj masini i ne radi
Ovde imas detaljno o debug i release verziji i mogucim problemima :
http://www.flounder.com/debug_release.htm
[ inostranac @ 30.03.2008. 18:41 ] @
Hvala na odgovorima.

Problem nije u tome da su neki DLL-ovi u Debug a neki u Release verziji. Vodio sam racuna o tome.
Na kraju sam sve ostavio sa Shared DLL, a skinuo sam vcredist_x86.exe i instalirao ga na masini koja nema VC++.
Malo je falilo da sve prodje savrseno, program se pali normalno, dll-ovi se ucitavaju normalno, ali primetio sam da se program nasumicno gasi pri otvaranju nekih tekstualnih fajlova.
Na mom kompjuteru se to nijednom nije desilo.

Da li slucajno znate zbog cega bi to moglo biti i da li postoji neko resenje u kome ne mora nista da se instalira pre pokretanja programa vec samo da se odredjeni fajlovi salju zajedno sa programom?
[ prog @ 25.04.2008. 22:56 ] @
da bi MFC aplikaciju distribuirao na PC koji nema VS (koliko se sjecam), potrebno ti je da uz exe i tvoje dllove priljepis sljedeće dll ove

1.MFC71.dll
2.msvcp71.dll
3.msvcr71.dll

Zadnji brojevi 71 oznacavaju verziju visual studia 2003. Ako se radi o Visua Studio 2005 tada je verzija 80 a ako je vs 2008 tada je verzija 90.

Ovo vrijedi ako ne koristis nikakve dodatne biblioteke konekcije sa bazom podataka, ili neke druge servise.

Sto se tice tvog prvog pitanja mislim da to nije nesto u redu s tvojom aplikacijom, i mislim da nije do sistemskih dllova.
[ deerbeer @ 26.04.2008. 00:12 ] @
I ja sam probao jednom tako :) ..al nije 100% sigurno .. zato i postoji vcredist_x86.exe
Nemas preterano velikog razloga za dynamic MFC link-ovanjem a samim tim i za kopiranjem nekog od mfcxxx-dll-a
Jeste da su dll-ovi manji (brze se load-uju) ali ako ih imas svega nekoliko ta razlika je vrlo mala.
Static linking se malko sporije load-uje al' nema da te boli glava da li ce raditi na klijentskoj masini :)