2011-05-19 157 views
4

我試圖編譯C代碼VS C++快訊2010年,但我得到了下面的錯誤跟蹤:如何編譯在Visual C C++編寫代碼表示2010

1>------ Build started: Project: test4, Configuration: Release Win32 ------ 
1>cl : Command line error D8045: cannot compile C file 'test4.c' with the /clr option 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

當我試着和CPP擴展我得到編譯此錯誤跟蹤:

1>------ Build started: Project: test4, Configuration: Release Win32 ------ 
1> test4.cpp 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(86): error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(98): error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(138): error C2664: 'OpenServiceW' : cannot convert parameter 2 from 'const char [9]' to 'LPCWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(196): error C2664: 'GetSystemDirectoryW' : cannot convert parameter 1 from 'CHAR [80]' to 'LPWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(203): error C2664: 'lstrcatW' : cannot convert parameter 1 from 'CHAR [80]' to 'LPWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(208): error C2664: 'CopyFile' : cannot convert parameter 1 from 'const char [13]' to 'LPCTSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\documents and settings\rkelly1\desktop\io\test4\test4\pt_ioctl.c(236): error C2664: 'CreateServiceW' : cannot convert parameter 2 from 'const char [9]' to 'LPCWSTR' 
1>   Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>test4.cpp(27): error C3861: 'kbhit': identifier not found 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+0

你的錯誤與.cpp擴展編譯時說明您是混合了'wchar_t'和' char'。即使您將該文件編譯爲C文件,您也需要修復這些錯誤。 – 2011-05-19 17:17:26

回答

4

當您創建項目,請確保您創建爲Win32程序,而不是一個CLR的應用程序。該設置可以在項目屬性下更改。

Propeties - >通用語言運行時支持是您正在尋找的設置。 將其設置爲無。

+0

謝謝,現在我知道clr代表什麼:d – Richard 2011-05-19 17:30:20

5

/clr表示使用.Net運行時 - 不是c語言運行庫!

只要調用文件.c,它會工作,有一個標誌來阻止你使用任何C++功能。

轉到屬性 - > C/C++ - >高級 - >編譯的,並選擇「C」

+0

我按照你的建議做了,而且我仍然得到命令行錯誤D8045:無法用/ clr選項編譯C文件'test4.c' – Richard 2011-05-19 17:03:14

+1

刪除/ clr optiuon - 這是MSFT奇怪的C++與C#/。的混合使用網 – 2011-05-19 18:17:47

+0

請注意,默認情況下,Visual C++編譯器會將.c擴展名爲C的文件和擴展名爲.cpp的文件編譯爲C++。如果您使用這兩個標準擴展名,則不需要更改此設置。 – 2011-05-20 16:51:30

1

首先,你應該刪除/clr,這不是你所追求的。

爲了應對這一問題的問題底層:要傳遞一個char陣列到LPWSTR和LPCWSTR和LPCTSTR,它們都是雙字節字符數組,所以某種形式或其他(的wchar_t*如果UNICODE被定義,否則最後一個只是簡單的char*樣)。

你將不得不取消您的UNICODE定義(不推薦)或轉換char[]char*wchar_t基於類型