PDA

View Full Version : [C++] 2 domande


Luc@s
07-05-2002, 17:39
Avrei due domande sul C++:

[list=1]
Come si carika na DLL esterna(con codice)????
Come si fa per sapere se un numero è pari o dispari(sempre con codice)????
[/list=1]

Grazie per ecentuali risposte



Ciauz:cool:

kingv
07-05-2002, 18:12
Originariamente inviato da Luc@s
[B]Avrei due domande sul C++:

[list=1]
Come si carika na DLL esterna(con codice)????
Come si fa per sapere se un numero è pari o dispari(sempre con codice)????
[/list=1]

Grazie per ecentuali risposte



Ciauz:cool:


2)


if(x%2 == 0)
//e' pari
else
//no

tas
07-05-2002, 18:13
Preso da MSDN:



The following example illustrates an important difference between run-time and load-time dynamic linking. If the MYPUTS.DLL file is not available, the application using load-time dynamic linking simply terminates. The run-time dynamic linking example, however, can respond to the error.


// File: RUNTIME.C
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from MYPUTS.DLL.

#include <stdio.h>
#include <windows.h>

typedef VOID (*MYPROC)(LPTSTR);

VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// Get a handle to the DLL module.

hinstLib = LoadLibrary("myputs");

// If the handle is valid, try to get the function address.

if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");

// If the function address is valid, call the function.

if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");

// Free the DLL module.

fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.

if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}

Because the program uses run-time dynamic linking, you should not link with the import library when creating the program module.

Luc@s
07-05-2002, 18:16
sono niubbo, potresti spiegarmi meglio come funzia(nn essere troppo tecnico pero:rolleyes: )????????



Ciauz:cool:

Luc@s
07-05-2002, 18:18
Originariamente inviato da kingv
[B]
2)


if(x%2 == 0)
//e' pari
else
//no




Grazie per aver risposto all secondo quesito, ma riguardo al primo:(??????



Ciauz:cool: :

tas
07-05-2002, 18:41
In sostanza la procedura riportata funziona così: con

hinstLib = LoadLibrary("nomedll.dll");

crei una instanza in memoria della DLL (nell'esempio "MYPUTS.DLL")

Se l'handle ricevuto è valido (!=NULL) allora puoi determinare l'indirizzo della funzione che hai esportato nella DLL, usando la funzione GetProcAddress (nell'esempio si determina l'indirizzo di myPuts).

Se è tutto ok, puoi chiamare la funzione, in questo modo:

(ProcAdd) (parametri);

Bisogna ricordarsi, finito di usare la DLL, di eliminare il riferimento ad essa e liberare la memoria, così:

fFreeResult = FreeLibrary(hinstLib);

Luc@s
07-05-2002, 18:45
tnk.
E un .lib cosa è, come lo si richiama e cosa deve contenere??????





Ciauz:cool:

kingv
07-05-2002, 19:00
Originariamente inviato da Luc@s
[B]

Grazie per aver risposto all secondo quesito, ma riguardo al primo:(??????



Ciauz:cool: :


non ho mai scritto una riga di C++ sotto win.
su solaris c'e' un meccanismo per caricare librerie C a runtime:
le funzioni dlopen, dlsym, dlerror e dlclose forniscono accesso al linker ld, ma non le ho mai utilizzate. Se sei interessato manda un pvt a ilsensine, lui dovrebbe conoscerle bene.

Luc@s
07-05-2002, 19:10
allora tu usi i .h ?????

P.S: E un .lib cosa è, come lo si richiama e cosa deve contenere??????


Ciauz:cool:

MickMacello
07-05-2002, 19:12
Originariamente inviato da Luc@s
[B]Avrei due domande sul C++:

[list=1]
Come si fa per sapere se un numero è pari o dispari(sempre con codice)????
[/list=1]



if (x&1)
//dispari
else
//pari

tas
07-05-2002, 21:29
I file .LIB sono librerie, che vengono indicate preventivamente al compilatore e vengono incluse nel tuo progetto. Sono accoppiati ad un file header (.H) che ne definisce i prototipi delle funzioni esposte.

Dirti di più è difficile, dipende dal tuo ambiente di sviluppo!

Luc@s
07-05-2002, 23:00
allora uso Dev C++ 4 su Windows ME



Ciauz:cool: