Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1) The beginning of the file "main.cpp"
- // - - - - - - - - - - - - - - - - - -
- #include <stdio.h>
- #include "resource/Cdate.h"
- ////////////////////////////////////////////////////
- int main() //
- {
- for(int i = 1; i <= 12; i++)
- {
- printf("%10s has %d days\n", Month[i].pszMon,
- Month[i].nDays);
- }
- return 0;
- }
- // 2) The beginning of the file "Cdate.h"
- // - - - - - - - - - - - - - - - - - -
- #include <windows.h>
- /////////////////////////////////////////////////
- class Cdate
- {
- static int nCounter; // Будет подсчитывать и хранить кол-во созданных объектов - месяцев
- public:
- int nDays; // Кол-во дней в этом месяце
- const char *pszMon; // Название месяца
- ////////методы///////
- Cdate(); // Инициализирует 12 объектов класса параметрами 12-ти месяцев.
- ~Cdate(); // Деструктор пригодится для паузы перед завершением программы.
- };
- extern Cdate Month[14]; // Массив месяцев (объектов класса Cdate)
- // 3) The beginning of the file "Cdate.cpp"
- // - - - - - - - - - - - - - - - - - -
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <windows.h>
- #include "Cdate.h"
- int connDll();
- extern int (*_retDate)(const char *psz, int n);
- extern HINSTANCE hDll;
- //////////////////////////////////////////////////////////
- int Cdate::nCounter = -1;
- Cdate Month[14]; // 12 месяцев
- // Инициализирует 12 объектов класса параметрами 12-ти месяцев.
- /////////////////////////////////////////////////////////////////////////
- Cdate::Cdate() //
- {
- int i = ++ nCounter;
- if(i <= 12)
- {
- if(i == 0)
- connDll(); // Подключаем dll-библиотеку
- Month[i].pszMon = (const char*)_retDate("month", i);
- Month[i].nDays = _retDate( "days", i);
- }
- }
- // Деструктор пригодится для паузы перед завершением программы.
- /////////////////////////////////////////////////////////////////////////
- Cdate::~Cdate() //
- {
- if(nDays == 28)
- {
- printf(" - - - - - - - - - - -\n");
- printf("%s destructor works. \n", pszMon);
- system("pause");
- FreeLibrary(hDll);
- }
- }
- // 4) The beginning of the file "connect.cpp"
- // - - - - - - - - - - - - - - - - - - - -
- #include <windows.h>
- #include <stdio.h>
- HINSTANCE hDll;
- int (*_retDate)(const char *psz, int n) = 0;
- ////////////////////////////////////////////////////
- int connDll() //
- {
- hDll = LoadLibrary("resource/dll/my.dll");
- if(hDll == 0)
- {
- printf("Error load of dll-library!\n");
- return 0;
- }
- _retDate = (int(*)(const char *, int) )GetProcAddress(hDll, "_retDate");
- if(_retDate == 0)
- {
- printf("Error load func a.\n");
- FreeLibrary(hDll);
- return 0;
- }
- return 0;
- }
- // 5) The beginning of the file "dllmain.cpp"
- // - - - - - - - - - - - - - - - - - - - -
- // Replace "dll.h" with the name of your header
- #include "dll.h"
- #include <windows.h>
- int nDays[14] = {0, 31, 28, 31, 30, 31, 30, // Кол-во дней в месяцах для невисокосного
- 31, 31, 30, 31, 30, 31, 0}; // года.
- const char *pszMonths[14] = { "Zero", // The element with index 0 will not be used,
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
- };
- DllClass::DllClass()
- {
- }
- DllClass::~DllClass ()
- {
- }
- BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
- DWORD reason /* Reason this function is being called. */ ,
- LPVOID reserved /* Not used. */ )
- {
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- break;
- case DLL_PROCESS_DETACH:
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- }
- return TRUE; // Returns TRUE on success, FALSE on failure
- }
- ///////////////////////////////////////
- extern "C" __declspec(dllexport)
- ////////////////////////////////////////////////////////////
- int _retDate(const char *psz, int n)
- {
- if( strcmp("month", psz) == 0) return (int)pszMonths[n];
- if( strcmp( "days", psz) == 0) return nDays[n];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement