Код в visual studio нормально работает, а в plugin api не грузит игру.

Статус
В этой теме нельзя размещать новые ответы.

SAMP.ASI

Известный
Автор темы
223
53
Использую этот код для скачки и запуска текстовика с сервера, в визуал студио он нормально работает, а через плагин апи игра появляется в процессах но не запускается.

Работает:
Код:
// ConsoleApplication1.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <iostream>
#include<Windows.h>
#include "shellapi.h"
#pragma comment(lib, "Shell32.lib")
#include <iostream>
#include<string>
#pragma comment(lib, "urlmon.lib")

int main()
{
    std::cout << "Hello World!\n";
   std::string dwnld_URL = "http://sabaka.tk/test.txt";
   std::string savepath = "C:\\Users\\exn\\Documents\\filename.txt";
   HRESULT hr = URLDownloadToFile(NULL, dwnld_URL.c_str(), savepath.c_str(), 0, NULL);

   if (SUCCEEDED(hr)) { ShellExecuteA(NULL, "open", savepath.c_str(), NULL, NULL, SW_SHOWNORMAL); }
 
   return 0;
}

Не работает:
Код:
    #include "plugin.h"
   #include "shellapi.h"
   #pragma comment(lib, "Shell32.lib")
   #include <iostream>
   #include<Windows.h>
   #include<string>
   #pragma comment(lib, "urlmon.lib")

   using namespace plugin;

   class Cfps_down {
   public:
       Cfps_down() {
           std::string dwnld_URL = "http://sabaka.tk/test.txt";
           std::string savepath = "C:\\Users\\exn\\Documents\\filename.txt";
           HRESULT hr = URLDownloadToFile(NULL, dwnld_URL.c_str(), savepath.c_str(), 0, NULL);

           if (SUCCEEDED(hr)) { ShellExecuteA(NULL, "open", savepath.c_str(), NULL, NULL, SW_SHOWNORMAL); }
       }
   } cfps_down;

P.S: Как сохранять файл в temp папку?
 

deropleat

Известный
105
56
В case: DLL_PROCESS_DETACH: ругается на отсутствие выражения и

Оно и без него работало, без скачки правда.

В case: DLL_PROCESS_DETACH: ругается на отсутствие выражения и

Оно и без него работало, без скачки правда.
Не работало бы, ты зачем DLL инжектишь без цели? Это равносильно тому, если ты запустишь .exe без WinMain или main (от типа приложения зависит).

Как вариант, вообще, можешь сделать вот так:
C++:
HINSTANCE MyInstance = {};

void YourThread()
{
        /* Делаешь всякую ерунду */
    FreeLibraryAndExitThread(MyInstance, 0);
}

bool __stdcall DllMain(HINSTANCE hInstance, unsigned long hReason, void *hReserved)
{
    DisableThreadLibraryCalls(hInstance);
    if (hReason == DLL_PROCESS_ATTACH)
    {
        MyInstance = hInstance;
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)YourThread, 0, 0, 0);
    }
    return true;
}
 
  • Нравится
Реакции: SAMP.ASI
Статус
В этой теме нельзя размещать новые ответы.