Winapi 如何手动导入Windows API函数?

Winapi 如何手动导入Windows API函数?,winapi,Winapi,为了好玩,我想创建一个不依赖于CRT的(工作)可执行文件。读了一些文章后,这并不难,所以我决定: /* test.c */ int main(){ return 0; } ... /* Compiling & Linking: */ cl /c /O2 /Ox /Os test.c link /ENTRY:main /NODEFAULTLIB /SUBSYSTEM:WINDOWS /ALIGN:16 /ignore:4108 test.obj 到目前为止还不错,但我希望能够调用

为了好玩,我想创建一个不依赖于CRT的(工作)可执行文件。读了一些文章后,这并不难,所以我决定:

/* test.c */
int main(){
    return 0;
}
...
/* Compiling & Linking: */
cl /c /O2 /Ox /Os test.c
link /ENTRY:main /NODEFAULTLIB /SUBSYSTEM:WINDOWS /ALIGN:16 /ignore:4108 test.obj
到目前为止还不错,但我希望能够调用WindowsAPI的函数。例如,我应该如何链接以下代码

#define UNICODE
#include <windows.h>

int main(){
    MessageBox
        (NULL, TEXT("Hello Stackoverflow!"), TEXT("Hello Stackoverflow"), MB_OK);
    return 0;
}
#定义UNICODE
#包括
int main(){
对话框
(空,文本(“Hello Stackoverflow!”),文本(“Hello Stackoverflow”),MB_OK);
返回0;
}
我读了以下文章,但没有找到解决方案:


提前感谢:)

链接到
user32.lib

link /ENTRY:main /NODEFAULTLIB /SUBSYSTEM:WINDOWS /ALIGN:16 /ignore:4108 test.obj user32.lib

在MSDN中查找该函数所属的库,并针对该库进行链接。

针对
user32.lib进行链接

link /ENTRY:main /NODEFAULTLIB /SUBSYSTEM:WINDOWS /ALIGN:16 /ignore:4108 test.obj user32.lib

在MSDN中查找该函数所属的库,并对其进行链接。

问题与删除CRT无关,如果没有它,您仍然可以使用它。问题与删除CRT无关,如果没有它,您仍然可以使用它。Lool我不敢相信它这么简单:),我一直在做:
\pragma comment(lib,“user32.lib”)
。你能解释一下向链接器提供库的名称与使用
#pragma
方法之间的区别吗?@AraK应该没有。我在源代码中没有看到
#pragma
,你是说它不起作用吗?我试过,但不起作用。这就是为什么我没有把它包括在问题中。@AraK我想没有区别,但是你应该使用
#pragma comment(lib,“user32”)
而不是
#pragma comment(lib,“user32.lib”)
@Adban:不,不管你是否包含扩展名。Lool我不敢相信它这么简单:),我一直在做:
#pragma comment(lib,“user32.lib”)
。请您解释一下,向链接器提供库的名称与使用
#pragma
方式之间的区别是什么?@AraK应该没有。我在源代码中没有看到任何
#pragma
,你是说它不起作用吗?我试过了,但不起作用。这就是为什么我没有把它包括在问题中。@AraK我认为没有区别,但是你应该使用
#pragma comment(lib,“user32”)
而不是
#pragma comment(lib,“user32.lib”)
@Adban:不,你是否包括扩展名并不重要。