2012-03-15 21 views
0

創建過程我使用的CreateProcess調用cl編譯和鏈接其它C++程序(TestProg.cxx)爲DLL的入口點。我調用cl與以下編譯選項:如何設置從CreateProcess的

/Od /nologo /Fo /RTC /w /Zc /EHsc /I\INCLUDE /I\LIB /I\PATH TestProg.cxx /DLL 

電話:

if (CreateProcess(full path to cl.exe, compilation options, NULL,NULL,FALSE,0,  NULL,NULL,&si,&pi)) 
{ 
//.... 
} 

運行從VS工具的應用提示,我得到了以下鏈接錯誤:

LINK : fatal error LNK1561: entry point must be defined 

什麼時我做錯了? 我搜索了最後半天在網上查詢答案,但沒有找到它。使用Windows API對我來說是新的。

感謝

+0

做'TestProg.css'有['DllMain'](http://msdn.microsoft.com/en-us/library/windows/desktop /ms682583%28v=vs.85%29.aspx)函數? – 2012-03-15 12:32:57

+0

如果從命令行運行cl,是否會得到相同的錯誤? – 2012-03-15 12:33:05

+0

@JoachimPileborg:我添加了一個默認的DllMain()我'TestProg.cxx' '的extern 「C」 BOOL WINAPI的DllMain(HINSTANCE的hInstance,DWORD dwReason,LPVOID lpReserved) { 返回TRUE; }' 也加入'/輸入:DllMain'的鏈接選項。 但現在我得到了以下鏈接錯誤: 'LINK:錯誤LNK2001:解析外部符號_DllMain main.obj:錯誤LNK2001:解析外部符號__RTC_Shutdown main.obj:錯誤LNK2001:解析外部符號__RTC_InitBase 爲主。 DLL:致命錯誤LNK1120:3懸而未決externals' 可否請你讓我知道如何解決它?謝謝 – ZOK 2012-03-19 09:27:10

回答

0

你有一個鏈接錯誤,所以鏈接程序無法建立你的二進制。可以通過/ENTRY命令行參數來提供的入口點,查看MSDN瞭解詳細信息:

/ENTRY (Entry-Point Symbol)

你會碰到這樣的:cl.exe /ENTRY:DllMain ...這裏的DllMain將在源代碼的入口點函數。

2

這不是使用CreateProcess()來運行編譯器的錯誤,這是編譯器告訴你的TestProg.cxx沒有main()函數的錯誤。 (或者DllMain(),因爲你似乎是建立一個DLL)

+0

感謝您的評論。我將下面的DllMain()添加到我的TestProg.cxx中: 'extern「C」BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved) { return TRUE; }' 也加入'/輸入:DllMain'的鏈接選項。 現在,我得到了以下錯誤: 'LINK:錯誤LNK2001:解析外部符號_DllMain main.obj:錯誤LNK2001:解析外部符號__RTC_Shutdown main.obj:錯誤LNK2001:解析外部符號__RTC_InitBase 爲主。DLL:致命錯誤LNK1120:3懸而未決externals' 能否請你解釋一下如何解決這個問題?由於 – ZOK 2012-03-19 09:31:48

+0

我實際上並沒有Windows編程的,所以我不知道你可能會錯過了什麼鏈接選項或特殊聲明。你應該問這是一個新問題,幷包含你正在編譯的實際代碼。 – Wyzard 2012-03-19 22:44:47