2011-11-03 50 views
1

为了好玩,我想创建一个不依赖于CRT的(工作)可执行文件。这并不难读了一些文章后,所以我看中了:如何手动导入Windows API函数?

/* 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 

到目前为止好,但我希望能够调用Windows API的功能。例如,我应该怎么链接下面的代码块?:

#define UNICODE 
#include <windows.h> 

int main(){ 
    MessageBox 
     (NULL, TEXT("Hello Stackoverflow!"), TEXT("Hello Stackoverflow"), MB_OK); 
    return 0; 
} 

我阅读下面的文章,但未能拿出一个解决方案: MinicrtSmall ProgramsTiny PETechniques for reducing Executable size

感谢提前:)

+0

这个问题与放弃CRT无关,你仍然没有这样做。 – hamstergene

回答

1

链接对user32.lib

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

在MSDN中查找函数属于哪个库,并反对它的链接。

+0

Lool我不敢相信它就是这么简单:),我所做的一切都是这样的:'#pragma comment(lib,“user32.lib”)''。你能解释一下为链接器提供库的名称和使用'#pragma'的方式有什么区别吗? – AraK

+0

@AraK应该没有。我在源代码中看不到#pragma,你是说它不起作用吗? – hamstergene

+0

我试过了,但没有奏效。这就是为什么我没有把它包括在问题中。 – AraK