作者 主題: Compiler Option像引入Lib檔一樣有Code能使用嗎?  (閱讀 7939 次)

0 會員 與 1 訪客 正在閱讀本文。

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
大家好! :)

我是用VC6.0

我想要寫一個多執行緒的程式,會用到 _beginthread()
Compiler Option:
要到 Project => Settings... => C/C++ 然後要在 Project Options: 的白色框框中加入 /MT 按下OK
才不會出現error C2065: '_beginthread' : undeclared identifier這個錯誤

問題如下:
我知道想使用 windows.h 檔,可在程式中加入以下的Code:
#include <windows.h>

而想使用 winmm.lib 檔,可在程式中加入以下的Code:
#pragma comment(lib, "winmm.lib")

而設定Compiler Option,可在程式中加入什麼Code呢?

« 上次編輯: 2011-10-06 13:07 由 make026 »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #1 於: 2011-10-06 14:47 »
我想要寫一個多執行緒的程式,會用到 _beginthread()
Compiler Option:
要到 Project => Settings... => C/C++ 然後要在 Project Options: 的白色框框中加入 /MT 按下OK
才不會出現error C2065: '_beginthread' : undeclared identifier這個錯誤

問題如下:
我知道想使用 windows.h 檔,可在程式中加入以下的Code:
#include <windows.h>

而想使用 winmm.lib 檔,可在程式中加入以下的Code:
#pragma comment(lib, "winmm.lib")

而設定Compiler Option,可在程式中加入什麼Code呢?

代碼: [選擇]
#define _MT
這樣嗎?
我亂猜的  :D

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #2 於: 2011-10-06 16:33 »

代碼: [選擇]
#define _MT
這樣嗎?
我亂猜的  :D
:-X
回大大,這樣不行,會出現 error C2065: '_beginthread' : undeclared identifier 這個錯誤

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5412
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #3 於: 2011-10-06 18:34 »
有什麼理由不用 /MT ? 這應該是最簡單的方法了.

你可以不使用 /MT, 然後自行對每一個檔案編譯是加上 /D_MT, 然後在 link 的時候不要使用預設的函式庫, 而自行去指定 MT 相關的函式庫.
這樣的結果是..... 為什麼不直接用 /MT 就好了?

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #4 於: 2011-10-06 19:19 »

代碼: [選擇]
#define _MT
這樣嗎?
我亂猜的  :D
:-X
回大大,這樣不行,會出現 error C2065: '_beginthread' : undeclared identifier 這個錯誤

那改用這樣試試...

代碼: [選擇]
#define _MT 1
或是用 true

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #5 於: 2011-10-06 19:48 »
有什麼理由不用 /MT ? 這應該是最簡單的方法了.

你可以不使用 /MT, 然後自行對每一個檔案編譯是加上 /D_MT, 然後在 link 的時候不要使用預設的函式庫, 而自行去指定 MT 相關的函式庫.
這樣的結果是..... 為什麼不直接用 /MT 就好了?

回大大,大大說的有道理。
但主要問題是,當別人Compile我的cpp原始碼檔案時,由於不知道如何設定,所以會產生error C2065: '_beginthread' : undeclared identifier 這個錯誤。
所以我想說有沒有類似引入Lib檔一樣;在主要程式碼的前面部分加一行code,來達到/MT作用的方法。

另外 _beginthread() 與 LIBCMT.LIB 和 MSVCRT.LIB 有關。
我有試過加入下面兩行code,可是沒有用。
代碼: [選擇]
#pragma comment(lib, "LIBCMT.LIB")
#pragma comment(lib, "MSVCRT.LIB")

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #6 於: 2011-10-06 19:51 »

那改用這樣試試...

代碼: [選擇]
#define _MT 1
或是用 true

回大大,還是同樣的錯誤。 :)

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #7 於: 2011-10-06 20:07 »

那改用這樣試試...

代碼: [選擇]
#define _MT 1
或是用 true

回大大,還是同樣的錯誤。 :)

是哦~ 要放在最開頭或是 process.h 之前喔

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #8 於: 2011-10-06 21:19 »

是哦~ 要放在最開頭或是 process.h 之前喔
:D  大大謝了! 有效呦!

想要好好的使用 _beginthread() ,沒error,沒warning,就要加入以下的code:
代碼: [選擇]
#define _MT
#include <process.h>    /* _beginthread, _endthread */
#pragma comment(lib, "libcmt.lib")
#pragma comment(linker, "/NODEFAULTLIB:libcd.lib")

另外請問大大,如何知道要用 #define _MT 的呢?

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Compiler Option像引入Lib檔一樣有Code能使用嗎?
« 回覆 #9 於: 2011-10-06 21:31 »
另外請問大大,如何知道要用 #define _MT 的呢?


參考這裡 Microsoft-Specific Predefined Macros ^_^

make026

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料