我正在尝试将WINAPI WinMain放入dll中

我正在尝试将WINAPI WinMain放入dll中,winapi,dll,winmain,Winapi,Dll,Winmain,我正在创建一个dll文件,同时尝试在加载dll时自动调用此函数。我该怎么做?这是一个WindowsAPI主函数,它创建了一个窗口,但我不知道怎么做。我的第一个想法是将其放入DllMain函数中,但我确实确定这是否可行,以及如何填充变量“HINSTANCE HINSTANCE、HINSTANCE hppreinstance、LPSTR lpCmdLine、int nCmdShow” 下面是我试图在加载dll时自动调用的函数,我希望它能打开一个窗口。谢谢 int-WINAPI WinMain(HIN

我正在创建一个dll文件,同时尝试在加载dll时自动调用此函数。我该怎么做?这是一个WindowsAPI主函数,它创建了一个窗口,但我不知道怎么做。我的第一个想法是将其放入DllMain函数中,但我确实确定这是否可行,以及如何填充变量“HINSTANCE HINSTANCE、HINSTANCE hppreinstance、LPSTR lpCmdLine、int nCmdShow”

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


int-WINAPI WinMain(HINSTANCE-HINSTANCE、HINSTANCE-hPrevInstance、LPSTR-lpCmdLine、int-nCmdShow)

DLL确实有一个
WinMain()
函数
DllMain()
DllEntryPoint()
是您正在寻找的。加载和卸载DLL时,Windows本身会调用它们。您自己不调用它们,而是实现它们。至于创建窗口,您可以调用
CreateWindow/Ex()
和相关函数。

DLL确实有一个
WinMain()
函数
DllMain()
DllEntryPoint()
是您正在寻找的。加载和卸载DLL时,Windows本身会调用它们。您自己不调用它们,而是实现它们。至于创建窗口,您可以调用
CreateWindow/Ex()
和相关函数。

在窗口中可以执行的操作有一些限制:

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


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

在以下情况下可以执行的操作有一些限制:

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


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

从DLL中导出一个函数,主机可以调用该函数从DLL中导出一个函数,主机可以调用该函数。我在没有线程的情况下调用了该函数,它冻结了我的应用程序。在我添加了线程之后,一切正常。谢谢,我没有线程,它冻结了我的应用程序。在我添加了线程之后,一切正常。谢谢