Winapi 如何手动导入Windows API函数?
为了好玩,我想创建一个不依赖于CRT的(工作)可执行文件。读了一些文章后,这并不难,所以我决定: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 到目前为止还不错,但我希望能够调用
/* 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:不,你是否包括扩展名并不重要。