|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
[C] enumerazione contenuto dir
allora, stavolta il mio problema è il seguente: sto lavorando sull'affarone delle DLL (ho fatto altri thread in passato, qualcuno quindi forse se lo ricorda) e devo semplicemente caricare nel mio processo tutte le mie DLL. tutto molto semplice, ma il problema è che il codice deve essere il più possibile portabile (tranne ovviamente il LoadLibrary), quindi devo scrivere un codice compilabile sia in VC++ sia col gcc che in un modo o nell'altro si procuri una lista delle librerie esterne da caricare e e carichi.
avevo pensato semplicemente di mettere le librerie in una dir speciale, e di far enumerare il suo contenuto dal programma, che poi fa un tentativo di caricamento per ciascun file che trova. come si fa in C puro e portabile ad enumerare il contenuto di una cartella? ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Al solito,ai tuoi quesiti io purtroppo non sono minimamente in grado di risponderti (e giustamente ti chiederai...perchè quindi non ti astieni dal farlo? -> la risposta è: non lo so! )...ma tu quando dici di voler compilare anche con gcc,intendi che vuoi comunque compilare sempre sotto windows?
Se la risposta è si,hai pensato di passare solo le opzioni al compilatore più che scrivere qualcosa in C puro apposta? Codice:
Gcc Directory Options -Bprefix -Idir -iquotedir -Ldir -specs=file -I- RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
man opendir
![]() Scherzi a parte. opendir readdir e closedir sono standard posix e quindi esserci pure su windows. ciao ![]() |
![]() |
![]() |
![]() |
#4 | |||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() LOL... però sei simpatico!!! ![]() Quote:
![]() Quote:
![]() (dai come gaf sarebbe stata stupenda... ![]() ![]() ![]() ![]() ciao |
|||
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() cercando in MSDN ho trovato una sottosezione di "Win32 and COM programming" che spiega un certo Interix (non so cosa sia) e come migrare da UNIX a Windows... qualcuno ne sa qualcosa? potrebbe servirmi anche per l'università in effetti... |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Ho provato a tirare fuori qualche ricordo di api e mi son ricordato qualcosa tipo FindNextFile, FindFirstFile ... forse è quello che ti serve. Ovviamente portabilità 0.
edit: google utile come al solito: http://www.microsoft.com/japan/devel...dfirstfile.htm ![]() ciao ![]() Ultima modifica di VICIUS : 27-08-2005 alle 23:41. |
![]() |
![]() |
![]() |
#7 | ||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() quello che mi serviva era qualcosa di portabile :\ edit: Quote:
![]() |
||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ue
![]() ma io le opendir, readdir etc...che diceva vicius le ho trovate e sono compatibili con windows: si devono includere le glib: #include <glib.h> "Windows Compatibility Functions -- functions to support portability to the Windows environment." http://developer.gnome.org/doc/API/g...functions.html
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() Ultima modifica di RaouL_BennetH : 28-08-2005 alle 00:23. |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
http://msdn.microsoft.com/library/de...irstfileex.asp Sono API del sistema operativo e quindi non dipendono dal compilatore (e nemmeno dal linguaggio). Per caricare le librerie LoadLibrary o GetModuleHandle e per determinare l'entry point della funzione che ti interessa importare usa GetProcAddress che restituisce un long che è l'indirizzo di memoria della funzione che intendi chiamare. Per usare tale funzione, però, devi castarla (nel senso di type casting) al giusto prototipo. Esempio: Codice:
user32=GetModuleHandle("USER32.DLL"); SLWA=(BOOL ( __stdcall *) (HWND, COLORREF, BYTE, DWORD)) GetProcAddress(user32, TEXT("SetLayeredWindowAttributes")); Codice:
HMODULE user32; BOOL (__stdcall *SLWA)(HWND, COLORREF, BYTE, DWORD);
__________________
buy here Ultima modifica di fantoibed : 28-08-2005 alle 12:29. |
|
![]() |
![]() |
![]() |
#10 | ||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() Quote:
![]() mi sa che per usare quell'header dovrei installare mingw... |
||
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
io cercavo un modo portabile per enumerare il contenuto di una cartella. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
__________________
buy here |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Se vuoi per forza compilare con Visual C++ difficilmente riuscirai a tirare fuori qualcosa di portabile ![]() Devi usare un compilatore multipiattaforma , come GCC aka minigw/Dev C++ Forse è possibile anche con Visual C++ ma è sicuramente + semplice con GCC Ciao
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Forse la soluzione sarebbe quella di usare il classico #ifdef a seconda che si lavori con VisualStudio o MingW/Cygwin, creando delle apposite funzioni o macro. Una palla, insomma... ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao ![]() |
|
![]() |
![]() |
![]() |
#16 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
be', riassumendo mi pare di capire che non c'è modo, quindi credo che adotterò quest'altra soluzione: scriverò in un file "index.dat" l'elenco delle librerie che il programma deve cercare nella directory e tentare di caricare: i files li posso leggere tranquillamente in maniera portabile. l'unica cosa che rimane non portabile è la LoadLibrary con relativa GetProcAddress.
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
![]()
__________________
buy here |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao ![]() |
|
![]() |
![]() |
![]() |
#19 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() ![]() il programma che sto facendo è C++ puro con pochissime parti Win32 (socket e qualcos'altro) che Daniele mi aiuterà a portare (per fortuna i socket sono quasi identici a quelli di Linux). il sorgente deve essere portabile. |
|
![]() |
![]() |
![]() |
#20 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() scrivo una volta sola e vale sia per Windows che per Linux |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:33.