我有一个包含Windows.h
并使用 windows API 的 win32 DLL。我想将此 DLL 加载到使用 MFC 的应用程序中。
这会导致任何内存泄漏或奇怪的行为吗?还是安全?
MFC 在 Windows API 之上实现。MFC 应用程序可以不受任何限制地调用 Windows API。但是,不可能(也不需要)#include <windows.h>
在包含afxwin.h
. 如果这样做,afxv_w32.h
将出错并显示以下消息:
WINDOWS.H 已经包含在内。MFC 应用程序不得
#include <windows.h>
这背后的原因不是兼容性问题。这是因为 MFC 必须设置几个预处理器符号来控制编译过程的某些方面。这些符号必须在包含之前定义windows.h
(afxv_w32.h
最终确实包含)。
同样,链接到使用 Windows API 实现的 .dll 也没有问题。事实上,默认的 MFC 应用程序已经链接到许多 Windows API 库,例如kernel32.dll
和user32.dll
. 如果声明 .dll 导出的头文件包含windows.h
您需要确保它包含在 .dll 之后afxwin.h
。否则预处理器将出错并显示上面引用的消息。