c++ - 无法调用dll文件中的线程

标签 c++ multithreading dll

我正在尝试创建一个 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/

相关文章:

c++ - 函数调用时非托管依赖 dll 加载失败

c++ - 为什么没有标准的 C++ 数学库 <math> 而不是 C 包装器 <cmath>?

c++ - 为什么 GetLastError() (NOT GetReturnMessage) 在用户名错误时返回 “wrong password”?

c++ - 在没有 Wrapper 类的情况下调用 ActiveX 接口(interface)上的方法

java - 优化 CPU 上运行的最大线程数

java - BlockingQueues 和线程访问顺序

.net - Visual Studio 的线程窗口如何识别 "Main Thread'

C# 字符指针,调用 C++ dll 函数和传递参数

c++ - 为什么其他 PC 需要一些 DLL 文件,而我自己的不需要?

c++ - 如何使用 pugixml 提取子数据?