2011-11-03 48 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