我想把一个WINAPI WinMain放在一个DLL中

时间:2014-08-08 02:21:17

标签: winapi dll winmain

我正在创建一个dll文件,同时在我的DLL加载时尝试自动调用此函数。我怎样才能做到这一点?它是一个Windows API主要功能,创建一个窗口,但我不知道它是如何做到的。我的第一个想法是将它放入DllMain函数,但我确信这是否有效以及填写变量的内容" HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow"

下面是我在加载dll时尝试自动调用的函数,我希望它能打开一个Window。感谢。

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);

2 个答案:

答案 0 :(得分:4)

DllMain function中您可以执行的操作存在限制:

  

调用需要除Kernel32.dll之外的DLL的函数可能会导致难以诊断的问题。例如,调用User,Shell和COM函数可能会导致访问冲突错误,因为某些函数会加载其他系统组件。

这排除了直接从DllMain创建窗口。但是,你可以做的是从你的DllMain启动一个线程,该线程可以创建一个窗口。

答案 1 :(得分:2)

DLL具有WinMain()功能。您正在寻找DllMain()DllEntryPoint()。在加载和卸载DLL时,Windows本身会调用它们。你不是自己打电话,而是实施它们。至于创建窗口,可以调用CreateWindow/Ex()和相关函数。