Как создать рабочую ветку внутри DLL?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как создать рабочую ветку внутри DLL?

Сообщение Anonymous »

Я бы хотел написать C ++ Clr dll, который создает поток, который делает что -то самостоятельно. DLL загружается и поддерживается приложением «Classic» CSLACION CSLACION CSLACION.

Код: Выделить всё

#include 
#include "MyOutputWnd.h"
#pragma unmanaged
#pragma comment(lib, "user32.lib")
#using 
#using 
#using 

using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;

#include 

extern void ShowForm(void);
HANDLE hThread = NULL;

::BOOL WINAPI DllWork(__in::HMODULE hModule) {
MessageBoxA(NULL, "DllWork thread", "Msg title", MB_OK | MB_ICONQUESTION);
//ShowForm();
return true;
}

DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
MessageBoxA(NULL, (char*)lpParam, "The thread", MB_OK);
return 0;
}

::BOOL WINAPI DllMain(
__in::HMODULE hinstDLL,  // handle to DLL module
__in::DWORD fdwReason,     // reason for calling function
__in __reserved::LPVOID lpvReserved)  // reserved
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:

/*char buffer[100];
sprintf_s(buffer, "DllMain%s\n", "I can inject things");
OutputDebugStringA(buffer);*/

if  ((hThread = CreateThread(NULL, 0, &CreateMessageBox, "Hello World", 0, NULL)) == NULL) {
MessageBoxA(NULL, "CreateThread failed!", "Msg title", MB_OK | MB_ICONQUESTION);
return FALSE;
}

MessageBoxA(NULL, "CreateThread OK!", "Msg title", MB_OK | MB_ICONQUESTION);

break;

case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;

case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;

case DLL_PROCESS_DETACH:

if (lpvReserved != nullptr)
{
if (::CloseHandle(hThread) == FALSE) {
MessageBoxA(NULL, "CloseHandle(hThread) failed!", "Msg title", MB_OK | MB_ICONQUESTION);
}
else
{
MessageBoxA(NULL, "CloseHandle(hThread) OK!", "Msg title", MB_OK | MB_ICONQUESTION);
}
break; // do not do cleanup if process termination scenario
}

// Perform any necessary cleanup.
break;
}
return TRUE;  // Successful DLL_PROCESS_ATTACH.
}
< /code>
и код приложения C ++, запускающий библиотеку, так же просто, как: < /p>
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
typedef int(__stdcall* f_funci)();

int main()
{
HINSTANCE hGetProcIDDLL = LoadLibrary(L"D:/Projects/Project3/Debug/Project3.dll");

if (!hGetProcIDDLL) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79654529/how-to-create-a-working-thread-inside-a-dll[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»