Advertisement
Redee

Генерация окружения через 2 EXE для DLL

Sep 27th, 2015
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. /////////////////////
  2. // begin - Запуск EXE с необходимым окружением для DLL
  3. //////////////
  4.  
  5.  
  6. #include <string>
  7. #include <windows.h>
  8. using namespace std;
  9.  
  10. // 1ый проект - Лаунчер
  11. // запуск целевого EXE с необходимыми путями для DLL
  12. int main()
  13. {
  14.     // создаем Окружение для DLL
  15.     // добавляем Относительный путь в сист. перем. Path
  16.     string env = "PATH=./mydll_1234;";
  17.     size_t bufSze;
  18.     char* buf;
  19.     // сохраняем путь сист. переменной Path, добавляем свой путь, устанавливаем Path
  20.     _dupenv_s(&buf, &bufSze, "PATH");
  21.     env.append( buf );
  22.     // Прибиваем "гвоздями" окружение
  23.     // лучше передавать 7ым аргументом в CreateProcess
  24.     //_putenv( env.c_str() );
  25.    
  26.     // запускаем приложение
  27.     STARTUPINFO sti;
  28.     ZeroMemory(&sti,sizeof(STARTUPINFO));
  29.     PROCESS_INFORMATION pi;
  30.     // 2ым параметром путь к EXE
  31.     CreateProcess(NULL, "test.exe", NULL, NULL, FALSE, NULL, (LPVOID)env.c_str(), NULL, &sti, &pi);
  32.     return 0;
  33. }
  34.  
  35. /////////////
  36. // для /subsystem: Windows
  37. int main_Launcher(int argc, char* argv[], int (*ptrMain)() )
  38. {
  39.     return ptrMain();
  40. }
  41.  
  42. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
  43. {
  44.     return main_Launcher(__argc, __argv, &main );
  45. }
  46. /////////////
  47.  
  48.  
  49. /////////////////////////////////
  50. //////////////////////
  51. ///////////
  52.  
  53.  
  54. #include <windows.h>
  55. #include "SFML/Graphics.hpp"
  56. using namespace sf;
  57.  
  58. // 2ой проект - целевой EXE
  59. // портируемый код
  60. int main()
  61. {
  62.     RenderWindow win(VideoMode(800, 600), "123");
  63.     win.setVerticalSyncEnabled(true);
  64.     Event eV;
  65.     while( win.isOpen() )
  66.     {
  67.         while( win.pollEvent(eV) )
  68.         {
  69.             if(eV.type == Event::Closed) win.close();
  70.         }
  71.         win.clear();
  72.         win.display();
  73.     }
  74.     return 0;
  75. }
  76.  
  77. /////////////
  78. // для /subsystem: Windows
  79. int main_Launcher(int argc, char* argv[], int (*ptrMain)() )
  80. {
  81.     return ptrMain();
  82. }
  83.  
  84. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
  85. {
  86.     return main_Launcher(__argc, __argv, &main );
  87. }
  88. /////////////
  89.  
  90.  
  91. /////////////////////
  92. //end - Запуск EXE с необходимым окружением для DLL
  93. //////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement