Advertisement
dllbridge

dllBridge.h

Feb 14th, 2022
843
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.06 KB | None | 0 0
  1.  
  2. ////////////////////////////////////////////////////////////////////////////////////
  3. //    
  4. //   Внизу этого файла примеры (закомментированные) для консольного приложения
  5. //
  6. //   E-mail: dllBridge@gmail.com
  7. //    
  8. //   10 Feb 2022  (16:12)
  9. //   Нужно сделать программное отключение программы по её номеру. Отправить запрос на отключение, через dllBridge.dll
  10. //    7 Feb 2022  (16:16)  
  11. //   24 Dec 2021  (14:52)
  12. //   18 Sep 2020  (12:14)
  13. //
  14.  
  15.  
  16. #ifdef     _MSC_VER
  17. #define    _CRT_SECURE_NO_WARNINGS
  18. #endif
  19.  
  20. #include    <stdio.h>
  21. #include   <string.h>
  22. #include   <locale.h>                                                                  //  Здесь живёт setlocale()
  23. #include  <windows.h>
  24.  
  25.  
  26. ////////////////////////////////////////////////////////////////////////////////////
  27. struct WL_msg                                                                     //  
  28. {
  29.  
  30.        int        nCondition,
  31.                       nPrint;   //  Вариант печати. Для консоли, Windows-окна или другое...
  32.        char   szComment1[81],
  33.               szComment2[81];  
  34.  
  35. } msg;
  36.  
  37.  
  38. HINSTANCE                hDll;                                         // if(hDll != 0) библиотека подключена.
  39.  
  40. char           szPathDLL[111],
  41.               szPathBase[100] = "C:\\dllBridge",                                       //  Default folder                    
  42.                szWLError[201];
  43.  
  44. int             ProgramNumber = 299,    // Вы можете здесь поменять этот номер до подключения к dllBridge.dll                    
  45.                 OldPrg_Number,          // или вызвать dllBridge_init(7564); 7564 - это новый номер.
  46.                       nPerson = 214,                                                           //      User number
  47.               (*Transit)[100];
  48.                  
  49.              
  50. //////////////////////////////
  51. int*   (*__getAdrBOSS)(int n);
  52. int    (*__DisConnect)(int n);
  53. int dllBridge(const char *sz);
  54.  
  55.  
  56. void      Printing_messages();   // Печатает на экран текущее состояние подключения.
  57.  
  58.  
  59. #ifdef __cplusplus               // g++  (C++) code + + + + + + + + + + + + + + + + +
  60.  
  61. namespace
  62. {
  63.    struct WLMain
  64.    {
  65.        
  66.        int  res;
  67.        
  68.        ///////////////////////////////////////////////                           Transit[3][17] = 317;
  69.        WLMain()                                     //                   printf("\nres = %d \n", res);
  70.        {
  71.              
  72.  
  73.               res = dllBridge(szPathBase); 
  74.               Printing_messages();
  75.        }
  76.        
  77.        ///////////////////////////////////////////////
  78.       ~WLMain()                                     //  
  79.        {
  80.            if(res)
  81.            {
  82.                __DisConnect(ProgramNumber);
  83.                  hDll = 0;
  84.                  strcpy(msg.szComment1, "Disconnected from the library \"dllBridge.dll\".");
  85.                  strcpy(msg.szComment2, "...");
  86.                  Printing_messages();
  87.            }
  88.        }       
  89.    
  90.    } Obj;
  91.    
  92. }  
  93.  
  94. #endif                   // #else        // C   code + + + + + + + + + + + + + + + + +
  95.  
  96.  
  97.  
  98. //  Принимает номер программы. С его помощью происходит подклюние и взаимодействие с другими программами.
  99. //  Возвращает "0" (нуль), если не смогли подключиться.
  100. //  Возвращает "1", если успешно подключились.  
  101. ///////////////////////////////////////////////////////////////////////////////
  102. int dllBridge_init(int numb)                                                 //
  103. {
  104.  
  105.     ProgramNumber = numb;
  106.     int res = dllBridge("C:\\dllBridge");                                    //         Путь, где лежит dllBridge.dll
  107.     Printing_messages();
  108. return res;    
  109. }
  110.  
  111.  
  112.  
  113. ///////////////////////////////////////////////////////////////////////////////////////
  114. int dllBridge(const char *sz)                                                        //
  115. {
  116.  
  117.     if(hDll)
  118.     {
  119.      __DisConnect(OldPrg_Number);                                                       //  To reconnect DLL.
  120.        FreeLibrary(hDll);
  121.     }  
  122.     else {                                  //  Этот код исполняется только 1 раз !  
  123.        
  124.        setlocale(LC_ALL, "Rus");            //  The Cyrillic alphabet to a console application.
  125.        if(msg.nPrint == 0) msg.nPrint = 1;  //  Печать сообщений в окно консоли с паузой 2 сек. (По умолчанию).
  126.     }
  127.    
  128.     char   sz1[201];
  129.     strcpy(sz1, sz);      
  130.     strcat(sz1, "\\dllBridge.dll");
  131.    
  132.    
  133.     hDll = LoadLibrary(sz1);                                                        
  134.    
  135.     int res;
  136.    
  137.     if(hDll == 0)
  138.     {
  139.        res = 0;
  140.        goto L_02;
  141.     }  
  142.        
  143.     OldPrg_Number = ProgramNumber;
  144.  
  145.   __getAdrBOSS = (int*(*)(int))GetProcAddress(hDll,   "__getAdrBOSS");                 
  146.  
  147.     Transit = (int(*)[100])__getAdrBOSS(ProgramNumber);     //   Second_Number);//     
  148.            
  149.     if(     Transit ==  0) { res = -2; goto L_02; }                             //  All connections are busy.
  150.     if((int)Transit == -1) { res = -1; goto L_02; }      //  A program with this number is already connected.
  151.  
  152.   __DisConnect =   (int (*)(int))GetProcAddress(hDll, "__DisConnect");   
  153.  
  154.     strcpy(szPathDLL, sz1);
  155.    
  156.      
  157.     Transit[10][0] = 2;  
  158.        
  159.    
  160.     memcpy(&Transit[10][1], "Console project", 15);  //  ! ! ! //memcpy(&Transit[10][1], szProjectInfo[1], 23);
  161.    
  162.     strcpy(szPathBase, sz);   //  szPathBase
  163.     strcpy (msg.szComment1, "Successfully connected to \"dllBridge.dll\".");
  164.     sprintf(msg.szComment2, "The number of this program is %d.", ProgramNumber);
  165.     msg.nCondition = 1;                                                                // 1 = everything is OK
  166. return       (int)hDll ;   
  167. L_02: FreeLibrary(hDll);
  168.      
  169.                    strcpy(msg.szComment2, "...");
  170.     switch(res)
  171.     {
  172.        
  173.         case   0:  strcpy (msg.szComment1, "Error! I can't load the library \"dllBridge.dll\".");    
  174.                    sprintf(msg.szComment2, "The library should be here: %s\\dllBridge.dll", szPathBase);
  175.                    break;                  
  176.         case  -1:  strcpy (msg.szComment1, "Error! A program with this number is already connected."); break;                                  
  177.         case  -2:  strcpy (msg.szComment1, "Error! All connections are busy.");                
  178.                                                            
  179.     }   return res;        
  180. }
  181.  
  182.  
  183.  
  184.  
  185. ////////////////////////////////////////////////////////////////////////////////
  186. void Printing_messages()                                                      //
  187. {
  188.      
  189.      switch(msg.nPrint)
  190.      {
  191.          case  1:  //  Печать сообщений в окно консоли с паузой 2 сек. (По умолчанию)                              
  192.                    printf("%s\n", msg.szComment1);
  193.                    printf("%s\n", msg.szComment2);   Sleep(2000);
  194.                    break;
  195.      }
  196. }
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. // - - - - - - - - - - - - - - - - - - - - - - - - - - - -+  
  231. //                                                        |
  232. //               Примеры для консольного приложения.      |
  233. //                                                        |
  234. // - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  235.  
  236. /*
  237.  
  238.  
  239.  
  240. #include   "C:\\dllBridge\\dllBridge.h"                                          
  241.  
  242. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  243. //    The dllBridge-folder should be here: "C:\dllBridge".                                               !        
  244. //                                                                                                       !  
  245. //    Already connected in the "dllBridge.h" file                                                        !  
  246. //    - - - - - - - - - - - - - - - - - - - - - - - -                                                    !
  247. //    #include    <stdio.h>                                                                              !
  248. //    #include   <string.h>                                                                              !
  249. //    #include   <locale.h>                                                                              !                            
  250. //    #include  <windows.h>                                                                              !
  251. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  252.  
  253.  
  254.  
  255.  
  256. // Демонстрация подключения для языка Си
  257. ///////////////////////////////////////////////////////////////////////////////
  258. int main()                                                                   //
  259. {
  260.    
  261.     if(dllBridge_init(7564) > 0)  
  262.     {
  263.    
  264.         for(int i = 4; i < 25; i += 2)                                   //       Подождём 20 секунд и отключимся.
  265.         {
  266.             Sleep(1000);
  267.             Transit[3][i] = 1000 + i ;  //  Содержимое этого массива просматривайте, через программу "UniMons.exe"
  268.             printf("%d\n",  1000 + i);     
  269.         }
  270.     }
  271.    
  272.   __DisConnect(ProgramNumber);   printf("\t   Отключились от \"dllBridge.dll\"");                                                
  273.  
  274. return 0;  
  275. }
  276.  
  277.  
  278.  
  279.  
  280.  
  281. // Такой же пример, но для языка C++
  282. ///////////////////////////////////////////////////////////////////////////////
  283. int main()                                                                   //
  284. {
  285.    
  286.     for(int i = 4; i < 25; i += 2)                                           //       Подождём 20 секунд и отключимся.
  287.     {
  288.         Sleep(1000);
  289.         Transit[3][i] = 1000 + i ;          //  Содержимое этого массива просматривайте, через программу "UniMons.exe"
  290.         printf("%d\n",  1000 + i);     
  291.     }                                              
  292.  
  293. return 0;  
  294. }
  295.  
  296.  
  297. */
  298.  
  299.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement