Код в 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
Ну попробуй вот так:

(CFpsDown.h)
C++:
#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 CFpsDown
{
public:
    CFpsDown()
} extern CFpsDown* g_CFpsDown;

(CFpsDown.cpp)
C++:
#include "CFpsDown.h"
CFpsDown* g_CFpsDown = new CFpsDown;

CFpsDown::CFpsDown()
{
   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);
}
 
Последнее редактирование:

SAMP.ASI

Известный
Автор темы
223
53
Ну попробуй вот так:

(CFpsDown.h)
C++:
#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 CFpsDown
{
public:
    CFpsDown()
} extern CFpsDown* g_CFpsDown;

(CFpsDown.cpp)
C++:
#include "CFpsDown.h"
CFpsDown* g_CFpsDown = new CFpsDown;

CFpsDown::CFpsDown()
{
   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);
}
Может я что-то делаю не так?
OGklzlZ7LU0.jpg
tFTsXCJkvuQ.jpg
wUX88ePhpBM.jpg
 

SAMP.ASI

Известный
Автор темы
223
53
Вновь угадай что произошло? Я опять пропустил закрывающую скобочку. 15 строчка CFpsDown.h
}; extern CFpsDown* g_CFpsDown;
Вроде все нормально, но игра остается просто висеть в процессах(
60r2xwasvYw.jpg
 

deropleat

Известный
105
56
Вроде все нормально, но игра остается просто висеть в процессах(
60r2xwasvYw.jpg
А что ты хочешь? У тебя она не зависла? Не зависла. Код работает? Работает. Что тебе именно надо еще?

Кстати, назрело 2 вопроса:
1) Зачем тебе такая конструкция? У тебя название плагина - FPSDown, а код никак с FPS не связан))) Я как бы догадываюсь, но все-таки...
2) А как у тебя вообще код работает, если в нем даже нет DllMain? У тебя просто эта функция и все.
 

SAMP.ASI

Известный
Автор темы
223
53
А что ты хочешь? У тебя она не зависла? Не зависла. Код работает? Работает. Что тебе именно надо еще?

Кстати, назрело 2 вопроса:
1) Зачем тебе такая конструкция? У тебя название плагина - FPSDown, а код никак с FPS не связан))) Я как бы догадываюсь, но все-таки...
2) А как у тебя вообще код работает, если в нем даже нет DllMain? У тебя просто эта функция и все.
Грузить информацию с форума(она парсится на сервере и записывается в тхт). ФпсДаун ради рофла. В папке пять фпс апов и один даун.
Если убрать загрузку с сервера то отлично при старте игры запускает блокнот.

2.Да, фиг его знает. Я впервые дальше хеллоу ворлда на си дошел
 
Последнее редактирование:

deropleat

Известный
105
56
Грузить информацию с форума(она парсится на сервере и записывается в тхт). ФпсДаун ради рофла. В папке пять фпс апов и один даун.
Если убрать загрузку с сервера то отлично при старте игры запускает блокнот.

2.Да, фиг его знает. Я впервые дальше хеллоу ворлда на си дошел
А зачем ты тогда вообще лезешь туда? Как у тебя код инициализироваться будет без DllMain в DLL? Никак. Пиши DllMain.

А вообще, сдается мне то, что ты делаешь это с целью создать какое-нибудь вредоносное ПО.
 

SAMP.ASI

Известный
Автор темы
223
53
А зачем ты тогда вообще лезешь туда? Как у тебя код инициализироваться будет без DllMain в DLL? Никак. Пиши DllMain.

А вообще, сдается мне то, что ты делаешь это с целью создать какое-нибудь вредоносное ПО.
Можешь скинуть пример DLLMain?
Писал бы вирус не писал бы сюда
 

CleanLegend

Известный
Всефорумный модератор
476
928
Можешь скинуть пример DLLMain?
Писал бы вирус не писал бы сюда
BOOL APIENTRY DllMain(HINSTANCE hinstDLL,
DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH: // Подключение DLL
// Выполняем все необходимые
// действия по инициализации

// если инициализация прошла
// успешно возвращаем TRUE
// в противном случае – FALSE
return 1;

case DLL_PROCESS_DETACH: // Отключение DLL
// Выполняем все действия
// по деинициализации
break;

case DLL_THREAD_ATTACH: // Создание нового потока
// Переходим на многопоточную версию,
// если необходимо
break;

case DLL_THREAD_DETACH: // Завершение потока
// Освобождаем переменные, связанные с потоком
break;
}
return TRUE; // Возвращаем что-нибудь (все равно
// код возврата игнорируется)
}
 
Последнее редактирование:

SAMP.ASI

Известный
Автор темы
223
53
В case: DLL_PROCESS_DETACH: ругается на отсутствие выражения и
BOOL APIENTRY DllMain(HINSTANCE hinstDLL,
DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH: // Подключение DLL
// Выполняем все необходимые
// действия по инициализации

// если инициализация прошла
// успешно возвращаем TRUE
// в противном случае – FALSE
return 1;

case: DLL_PROCESS_DETACH: // Отключение DLL
// Выполняем все действия
// по деинициализации
break;

case DLL_THREAD_ATTACH: // Создание нового потока
// Переходим на многопоточную версию,
// если необходимо
break;

case DLL_THREAD_DETACH: // Завершение потока
// Освобождаем переменные, связанные с потоком
break;
}
return TRUE; // Возвращаем что-нибудь (все равно
// код возврата игнорируется)
}
Оно и без него работало, без скачки правда.

В case: DLL_PROCESS_DETACH: ругается на отсутствие выражения и
BOOL APIENTRY DllMain(HINSTANCE hinstDLL,
DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH: // Подключение DLL
// Выполняем все необходимые
// действия по инициализации

// если инициализация прошла
// успешно возвращаем TRUE
// в противном случае – FALSE
return 1;

case: DLL_PROCESS_DETACH: // Отключение DLL
// Выполняем все действия
// по деинициализации
break;

case DLL_THREAD_ATTACH: // Создание нового потока
// Переходим на многопоточную версию,
// если необходимо
break;

case DLL_THREAD_DETACH: // Завершение потока
// Освобождаем переменные, связанные с потоком
break;
}
return TRUE; // Возвращаем что-нибудь (все равно
// код возврата игнорируется)
}
Оно и без него работало, без скачки правда.
 
Статус
В этой теме нельзя размещать новые ответы.