View Full Version : [C++] Threading e dll, non ci capisco niente
stdecden
12-08-2007, 12:14
Salve a tutti, ho un paio di domande da farvi:
1) Come si crea un thread, e si devono usano le api di windows?
2) Come si crea una dll (con VC++ 2005 o dev-c++)
3) Come si crea un programma estendibile mediante plugin?
Salve a tutti, ho un paio di domande da farvi:
1) Come si crea un thread, e si devono usano le api di windows? su Windows si :D
2) Come si crea una dll (con VC++ 2005 o dev-c++) c'è pochissima differenza tra un eseguibile e una dll, sostanzialmente devi tener conto di due cose:
1) l'entry point non è obbligatorio ma è opzionale, e non si chiama più main o WinMain ma DllMain: http://msdn2.microsoft.com/en-us/library/ms682583.aspx
2) tramite un'apposita opzione devi dire al linker che il file di output deve essere una DLL e non un eseguibile stand-alone. in realtà non devi specificare esplicitamente quest'opzione (sempre che usi un IDE decente, come il primo dei due che hai nominato) ma tipicamente ti basta creare un progetto con un'apposito template.
3) Come si crea un programma estendibile mediante plugin? non erano 2 le domande? :Prrr:
comunque è una domanda che non ha molto senso: i programmi estendibili tramite plugins li crei come ti pare, sei tu che definisci l'architettura e le interfacce del programma e dei plugins. organizzare i plugins in forma di DLL non è una cattiva idea ad esempio, visto che sfrutti la modularità nativa del sistema operativo.
stdecden
12-08-2007, 13:18
Inoltre volevo chiedere se era possibile creare una dll anche nella versione express( + platform SDK)
Inoltre volevo chiedere se era possibile creare una dll anche nella versione express( + platform SDK)Sì, certo.
prendi il sorgente di miranda-im, organizza i plugin sottoforma di dll, così vedi come funziona.
stdecden
12-08-2007, 15:42
Grazie dei vostri consigli :D
Ho provato a fare un po'di test:
int main(void)
{
HINSTANCE Handle = LoadLibrary(L"plugin.dll");
if(!Handle)
{
std::cout << "Dll not found\n";
system("pause");
return 1;
}
typedef int (__stdcall *CreateFn)();
CreateFn funct;
// funct = (CreateFn) GetProcAddress(Handle,"GetValue"); <<<<<<<<<<<<< Errore
funct = (CreateFn) GetProcAddress(Handle,"?GetValue@@YAHXZ");
if(!funct)
{
std::cout << "Function not found\n";
system("pause");
return 1;
}
std::cout << funct();
system("pause");
return 0;
}
Cé un modo per usare getprocaddress con il nome che io ho dato alla funzione, invece di quello codificato?
Cé un modo per usare getprocaddress con il nome che io ho dato alla funzione, invece di quello codificato?In genere, in questi casi, è meglio togliere le decorazioni dei nomi.
Basta che la funzione la dichiari extern "C"
stdecden
12-08-2007, 16:28
Grazie mille !!!
Ora funziona
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.