Newsgroup: it.comp.lang.c++
Titolo: Classi e DLL

Salve a tutti!
 
1) costruisco una dll 'perfetta'.cpp; dentro alla dll metto funzioni e
procedure. Metto 
   pure una classe pippo con le sue funzioni, e all'interno  della DLL tale
classe
   funziona bene.
2) Come faccio ad EXPORTARE tale classe all'esterno?? e come faccio a
richiamare le
   sue funzioni. Nel programma che testa la dll come posso fare per
compilare bene 
   una cosa del genere:
			pippo a1;
			pippo a2;
						?
3) E' possibile esportare da una DLL all'esterno anche variabili??
strutture-record??
4) Come e' possibile memorizzare una dialogbox (.rc) in una dll ?  Come si
richiama
   poi dal programma main_dll_test.exe ?
					Tantissime grazie!!
								Maurizio.
 
*****************************************************************************
+                                                                          
+	HAPPY SURFING ON THE NET !!                     	Ciao!!!
+        								
+	                                by
+
+							  C R I X 98
+
***************************************************************************
--
Posted from 
mta2.iol.it
 [195.210.91.152]
via Mailgate.ORG Server - 
http://www.mailgate.org

   poi dal programma main_dll_test.exe ?
----------------------myDLL---------------------------
#include <windows.h>
DWORD WINAPI DllMain(HINSTANCE hInst,
                     DWORD dwReason,
       LPVOID    lpReserved){
 switch(dwReason){
 case DLL_PROCESS_ATTACH:
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
  return TRUE;
 };
 return FALSE;
}
#ifdef __cplusplus
extern "C" {
#endif
DWORD _declspec(dllexport) __cdecl MyFunc(DWORD a, DWORD b){
 return a+b;
}
#ifdef __cplusplus
}
#endif
class _declspec(dllexport) MyClass{
private:
 DWORD m_int;
public:
 MyClass(DWORD a):m_int(a){};
 virtual DWORD Sum(DWORD b){ return m_int+=b; };
};
DWORD _declspec(dllexport) g_DWord[2]={1,1};
--------------------------tryDll----------------------------------
#include <windows.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
DWORD __cdecl MyFunc(DWORD a, DWORD b);
#ifdef __cplusplus
}
#endif
class MyClass{
private:
 DWORD m_int;
public:
 MyClass(DWORD a);
 virtual DWORD Sum(DWORD b);
};
_declspec(dllimport) DWORD g_DWord[2];
BOOL CALLBACK WndProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam){
 switch(msg){
 case WM_COMMAND:
  EndDialog(hDlg,TRUE);
  return TRUE;
 }
 return FALSE;
};
int main(int argc, char ** argv){
 DWORD a,b;
 MyClass * pMyClass;
        LPDLGTEMPLATE lpVoid;
        HRSRC   hRes;
        HGLOBAL hGlobal;
        HINSTANCE hModule;
 printf("sum of %X %X is %X \r\n",a,b,MyFunc(a,b));
 pMyClass = new MyClass(5);
 printf("Class sum %d \r\n",pMyClass->Sum(6));
        printf("Exported variables %d %d\r\n",g_DWord[0],g_DWord[1]);
 hModule = LoadLibrary("mydll.dll");
        if (hModule){
      hRes = FindResource(hModule,"MyDialog",RT_DIALOG);
             if (hRes) {
                  hGlobal=LoadResource(hModule,hRes);
                  lpVoid =(LPDLGTEMPLATE)LockResource(hGlobal);
           DialogBoxIndirect((HINSTANCE)0x400000,lpVoid,NULL,WndProc);
      } else {
                  printf("No FindResource \r\n");
             };
      FreeLibrary(hModule);
        } else {
  printf("No LoadLibrary\r\n");
 }
 return ERROR_SUCCESS;
}
----------------------------------rscdata.rc-------------------------------
#include <windows.h>
MyDialog DIALOG 10,10,200,100
CAPTION  "questo titolo"
STYLE   WS_BORDER|WS_VISIBLE
BEGIN
 CTEXT "Select One:", 1, 10, 10, 280, 12
        PUSHBUTTON "&Close", 2, 75, 30, 60, 12
END