从C ++ Win32 EXE导出不需要的符号

时间:2015-03-13 19:59:36

标签: c++ visual-studio winapi

我使用普通向导创建的项目(Visual Studio 2013)进行了实验。我想知道是否可以使用本地应用程序效果轻松替换某些已知API(如MessageBox)的功能。

#include "stdafx.h"

int WINAPI MessageBoxA(HWND p0, LPCSTR p1, LPCSTR p2, UINT p3)
{
    printf("%s\n", p1);

    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    MessageBoxA(0, "test", 0, 0);

    return 0;
}

忽略链接器属性中的user32.lib。该应用程序构建并运行良好。控制台按预期显示 test

我确实得到了warning C4273: 'MessageBoxA' : inconsistent dll linkage,但显然可以忽略它,因为应用运行正常。

实验的特点是Dependency Walker现在将_MessageBoxA@16显示为来自EXE的导出(???)符号。

是什么让符号导出?我了解Windows SDK标头必须使用__declspec(dllimport),这会造成不一致,但肯定没有人使用__declspec(dllexport)以便导出符号。

为什么会发生这种情况以及如何在不导出符号的情况下实现相同效果的任何想法?

enter image description here

0 个答案:

没有答案