我正在尝试创建一个 dll,它将在您加载他时创建一个线程 由于某种原因,线程函数没有做任何事情..:\
这是我的代码:
dllthread != null.. 为什么它不起作用?
#include "stdafx.h"
DWORD WINAPI ThreadProc(
__in LPVOID lpParameter
)
{
std::ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DWORD DllThreadID;
HANDLE DllThread; //thread's handle
DllThread=CreateThread(NULL,0,&ThreadProc,0,0,&DllThreadID);
//
if (DllThread == NULL)
MessageBox(NULL, L"Error", L"Error", MB_OK);
CloseHandle(DllThread);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
最佳答案
不是从 DllMain()
启动线程,而是导出一个启动线程的函数:
extern "C" __declspec(dllexport) void start_thread()
{
DWORD DllThreadID;
HANDLE DllThread; //thread's handle
DllThread=CreateThread(NULL,0,ThreadProc,0,0,&DllThreadID);
if (DllThread == NULL)
MessageBox(NULL, L"Error", L"Error", MB_OK);
else
CloseHandle(DllThread);
}
调用 LoadLibrary()
后,使用 GetProcAddress()
访问 start_thread()
函数。
希望这对您有所帮助。
关于c++ - 无法调用dll文件中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274083/