『壹』 用VS控制台寫個電腦關機軟體,關機主要代碼是shutdown,這個我知道,求詳細點。。。
到現在為止你看到的還都是DOS應用程序的代碼。代碼中使用的第二個技巧是得到當前時間,它使用了一個MFC調用來完成這項任務。那麼,如何才能夠在控制台應用程序中訪問MFC函數呢?正如你所看到的,我在代碼的一開始就包含AFXCOLL.H文件,.
『貳』 vs2013怎麼停止運行原程序
首先,需要打開一個 VS2013 的界面中
2
/6
然後點擊 VS2013 菜單中的 工具 菜單
3
/6
點擊了 工具 菜單之後,彈出了下拉菜單選中為 選項
4
/6
進入到了 選項 界面中,點擊 常規 選項
5
/6
進入到了 常規 界面中,去掉勾選上 一個進程中斷時則中斷所有進程 選項
6
/6
去掉勾選上 一個進程中斷時則中斷所有進程 選項之後,點擊 確定
『叄』 怎麼用VBS關機
set ws=CreateObject("Wscript.Shell")
ws.run "cmd.exe /c shutdown -r -t 3000 -c ""12345"" ",0 ,true
'==========================================
'此腳本是使用CMD命令完成關機的
'3000部分可隨便改,(倒計時的時間,0就是現在關機),12345部分是關機窗口上的「消息」部分
'如要消除關機窗口,請用下面的代碼:
'==========================================
set ws=CreateObject("Wscript.Shell")
ws.run "cmd.exe /c shutdown -a"
『肆』 求VS2010 C#FORM編寫強制關機代碼 只要關機的
using System.Runtime.InteropServices; // 提供DllImport等特性,是P/Invoke的關鍵
// 這個結構體將會傳遞給API。使用StructLayout(...特性,確保其中的成員是按順序排列的,C#編譯器不會對其進行調整。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
// 以下使用DllImport特性導入了所需的Windows API。
// 導入的方法必須是static extern的,並且沒有方法體。調用這些方法就相當於調用Windows API。
[DllImport("kernel32.dll", ExactSpelling = true)]
internal static extern IntPtr GetCurrentProcess();
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool ExitWindowsEx(int flg, int rea);
// 以下定義了在調用WinAPI時需要的常數。這些常數通常可以從Platform SDK的包含文件(頭文件)中找到
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
internal const int EWX_LOGOFF = 0x00000000;
internal const int EWX_SHUTDOWN = 0x00000001;
internal const int EWX_REBOOT = 0x00000002;
internal const int EWX_FORCE = 0x00000004;
internal const int EWX_POWEROFF = 0x00000008;
internal const int EWX_FORCEIFHUNG = 0x00000010;
// 通過調用WinAPI實現關機,主要代碼再最後一行ExitWindowsEx,這調用了同名的WinAPI,正好是關機用的。
private static void DoExitWin(int flg)
{
bool ok;
TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero;
ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
ok = ExitWindowsEx(flg, 0);
}
private void button1_Click(object sender, EventArgs e)
{
DoExitWin(EWX_SHUTDOWN);
}
『伍』 請教.NET高手,如何用VS2008製作一個區域網遠程關機程序。主要是源代碼不知道怎麼弄。
用UDP發送一個消息給客戶端,當客戶端收到這個消息時,運行以下代碼:
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine("shutdown /s");
p.StandardInput.WriteLine("exit");
你把這些代碼寫到一個方法中,收到消息就運行這個方法。
『陸』 VS 指令有哪些啊
-weather snow下雪-weather rain下雨-weather wind刮風-weather moonlight月光燈-water red河水變紅-water green河水變綠-water blue河水變藍
『柒』 怎麼用程序實現電腦的自動關機
下面是我願來寫的關機程序,你可以拷來用.因為你的系統是2000,所以需要特別注意的是應該先得到關機的特權:(你要想弄懂下面的程序,要先學學怎麼調用api函數的知識.如果你一看就頭大,哈哈,那放棄吧......嘿嘿,想關機也並不是容易的事情啊......)
其中:前面一些Public Declare都是api函數的聲明.
Public Sub AdjustToken()子程序用來取得關機特權.
Public Sub Shutdown() '是關機子程序
Public Sub Reboot() '是重啟子程序
*********************代碼開始了:*****************
Public Structure LUID
Dim UsedPart As Integer
Dim IgnoredForNowHigh32BitPart As Integer
End Structure
Public Structure LUID_AND_ATTRIBUTES
Dim TheLuid As LUID
Dim Attributes As Integer
End Structure
Public Structure TOKEN_PRIVILEGES
Dim PrivilegeCount As Integer
Dim TheLuid As LUID
Dim Attributes As Integer
End Structure
'強制關機函數
Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Integer, ByVal dwReserved As Integer) As Integer
'GetLastError函數返回本線程的最後一次錯誤代碼。錯誤代碼是按照線程
'儲存的,多線程也不會覆蓋其他線程的錯誤代碼。
Public Declare Function GetLastError Lib "kernel32" () As Integer
'GetCurrentProcess函數返回當前進程的一個句柄。
Public Declare Function GetCurrentProcess Lib "kernel32" () As Integer
'OpenProcessToken函數打開一個進程的訪問代號。
Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Integer, ByVal DesiredAccess As Integer, ByRef TokenHandle As Integer) As Integer
'LookupPrivilegeValue函數獲得本地唯一的標示符(LUID),用於在特定的系統中
'表示特定的優先權。
'UPGRADE_WARNING: 結構 LUID 可能要求封送處理屬性作為此聲明語句中的參數傳遞。 單擊以獲得更多信息:「ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"」
Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA"(ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Integer
'AdjustTokenPrivileges函數使能或者禁用指定訪問記號的優先權。
'使能或者禁用優先權需要TOKEN_ADJUST_PRIVILEGES訪問許可權。
'UPGRADE_WARNING: 結構 TOKEN_PRIVILEGES 可能要求封送處理屬性作為此聲明語句中的參數傳遞。 單擊以獲得更多信息:「ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"」
'UPGRADE_WARNING: 結構 TOKEN_PRIVILEGES 可能要求封送處理屬性作為此聲明語句中的參數傳遞。 單擊以獲得更多信息:「ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"」
Public Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Integer, ByVal DisableAllPrivileges As Integer, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Integer, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Integer) As Integer
Public Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Integer)
'********************************************************************
'* 這個過程設置正確的優先權,以允許在Windows NT下關機或者重新啟動。
'********************************************************************
Public Sub AdjustToken()
Const TOKEN_ADJUST_PRIVILEGES As Short = &H20s
Const TOKEN_QUERY As Short = &H8s
Const SE_PRIVILEGE_ENABLED As Short = &H2s
Dim hdlProcessHandle As Integer
Dim hdlTokenHandle As Integer
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Integer
'使用SetLastError函數設置錯誤代碼為0。
'這樣做,GetLastError函數如果沒有錯誤會返回0
'''''''SetLastError 0
'GetCurrentProcess函數設置 hdlProcessHandle變數
hdlProcessHandle = GetCurrentProcess()
''''' If GetLastError <> 0 Then
''''' MsgBox "GetCurrentProcess error==" & GetLastError
''''' End If
OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hdlTokenHandle)
''''' If GetLastError <> 0 Then
''''' MsgBox "OpenProcessToken error==" & GetLastError
''''' End If
' 獲得關機優先權的LUID
LookupPrivilegeValue("", "SeShutdownPrivilege", tmpLuid)
'''''If GetLastError <> 0 Then
'''''MsgBox "LookupPrivilegeValue error==" & GetLastError
'''''End If
tkp.PrivilegeCount = 1 ' 設置一個優先權
'UPGRADE_WARNING: 未能解析對象 tkp.TheLuid 的默認屬性。 單擊以獲得更多信息:「ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"」
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
' 對當前進程使能關機優先權
AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
'''''If GetLastError <> 0 Then
'''''MsgBox "AdjustTokenPrivileges error==" & GetLastError
'''''End If
End Sub
Public Sub Shutdown() '關機子程序
'******************根據windows版本來關機************************
If glngWhichWindows32 = mlngWindowsNT Then
AdjustToken() '調用取得優先權子程序
End If
ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, &HFFFFs)
'*****************************************************************
End Sub
Public Sub Reboot() '重啟子程序
'******************根據windows版本來關機************************
If glngWhichWindows32 = mlngWindowsNT Then
AdjustToken() '調用取得優先權子程序
End If
ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, &HFFFFs)
'*****************************************************************
End Sub
『捌』 請問怎樣用C語言做一些小程序,例如給點電腦設置定時關機。我是用VS來編譯的。是用C語言還是用WIN32來做啊
開機後。立刻新建個txt。輸入 shutdown -s -t 600 ..........600可以改,單位是秒
別輸錯,然後重命名文件,我說的是全部重命名。把txt也刪掉。輸入345412.bat
雙擊
別忘加滿意
這用不著c,c++,vb你小題大做。。。。。
『玖』 VS2010正式版如何在程序運行完後等待用戶按任意鍵退出
我的不會哦,看我截圖
我的版本是10.0.30319.1
覺得這不是版本問題,之前我用RC版也沒你說的問題,不知是不是你設置問題
我用默認的設置
『拾』 VS2008關閉當前窗口命令
:
方式一:
點擊」開始」菜單, 指向 「Microsoft Platform SDK」 > 「Open Build Environment Windows」 > 「Set Windows XP 64 Build Environment」, 然後點擊」Set Windows XP 64 Build Environment (Debug)」, 這時, 一個控制台窗口將顯示, 一行文本顯示像」 the build environment set for a 64-bit」.
方式二:
在命令提示符下,
1. 點擊」開始」菜單, 然後點擊」運行」
2. 鍵入」command.exe」(沒有引號), 然後, 點擊」確定」
3. 變化當前目錄到C:\Program Files\Microsoft SDK(你的SDK安裝目錄), 然後鍵入」SetEnv.bat /XP64」(沒有引號)
現在, 開始啟動Visual C++ 6.0並用我們剛才配置好的創建環境
1. 在同一個命令窗口中(也就是你剛才設置64位環境的命令行窗口), 打開Visual Studio.
2. 鍵入 「Msdev /useenv」(沒有引號). 請注意, 不要打開一個新的命令行窗口, 再去打開Msdev.exe, 現在Visual C++ 6.0 IDE已經顯示, 並且include, library及executable目錄均被設置為64位的創建環境(注:查看這些配置, 點擊Tools > Options > Directories, 在」Show directories for: 「下拉列表中查看相應目錄配置).
另外, 如果Msdev.exe不在當前路徑下(通常是系統環境變數沒有相應指示), 變化目錄到你所安裝Visual Studio的目錄下, 例如: \Microsoft Visual Studio\Common\Msdev98\Bin, 然後, 再鍵入Msdev.exe.
譯注: 在前面的設置64位創建環境變數 , 已經將IDE的executable執行目錄調整到SDK的相應目錄下面, 也就是說, 作為可執行程序: 編譯器和鏈接器是在SDK目錄中, 而不再是默認的\Microsoft Visual Studio\Common\Msdev98\Bin
添加一個64位Debug配置
1. 在Visual C++ IDE中, 打開一個已經在的32位工程(例如: MyApplication)
2. 在」Build」菜單上, 點擊」Configurations」.
3. 在」Configurations」對話框上, 點擊」Add」.
4. 在」Add Project Configuration」對話框上, 設置」Configuration」到Debug64, 然後, 在」Copy Settings from」列表框中點擊」MyApplication – Win32 Debug」
5. 點擊」OK」完成設置, 點擊」Close」關閉.
設置激活配置為64位
1. 在」Build」菜單上, 點擊」Set Active Configuration」.
2. 點擊」MyApplication – Win32 Debug64」, 然後, 點擊」OK」.
修改編譯器和鏈接器的參數配置
由於64位的編譯器和鏈接器的參數配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟:
1. 在」Project」菜單中,點擊」Settings」.
2. 在」Project Settings」對話框中, 點擊」General」標簽. 在」Output directories」, 在」Intermediate files」 和」Output files」輸入框中, 鍵入」Debug64」(沒有引號)
3. 在」C/C++」標簽上, 在」Debug info」下拉列表中, 選擇」Program database(參數選項對應是 /Zi)
4. 在」Link」標簽上, 在」Project options」的輸入框中, 變化」/machine:I386」(沒有引號)到」/machine:IA64」(沒有引號)
譯注: 正確設置應是: /machine:AMD64
5. 在」View」菜單上, 點擊」Workspace」.
6. 然後, 移除幫助文件MyApplication.hpj
7. 如果你的應用程序是基於MFC的, 你必須添加一個MFC路徑以避免鏈接錯誤:LNK1004 on the Mfc42d.lib, 請按下面步驟操作:
a. 在」Tools」菜單上, 點擊」Options」.
b. 在」Directories」標簽上, 在」Show directories」下拉列表中, 選擇」Library Files」, 現在添加你的平台庫所在路徑: 」\Microsoft SDK\lib\IA64\mfc」(沒有引號)
譯注補充: 在」C/C++」標簽上, 在」Preprocessor definitions」輸入框中將WIN32改成WIN64
創建並調試這個工程
現在Build這個工程, 生成64位應用程序, 這個應用程序被部署在一個IA64計算機上.
要在Visual C++ 6.0中運行這個.exe文件, 按下面步驟:
注意: 你不能夠在Visual C++ 6.0 IDE中調試這個.exe文件.
a. 在你的IA64計算機上, 創建一個文件夾: C:\VC6MSVCMON
從X86(32位)計算機上拷貝這些文件到這個新創建的文件夾中:
Msvcmon.exe
Dm.dll
Msdis110.dll
Tln0t.dll
上面這些文件應在你的Visual C++ 6.0安裝目錄下:
\Visual Studio\Common\MSDev98\Bin
b. 在拷貝完這些文件後, 在IA64計算機上運行Msvcmon.exe, 然後, 點擊」Connect」.
c. 在X86(32位)計算機上, 打開Visual C++ 6.0 IDE, 在」Build」菜單上, 點擊」Debugger Remote Connection」.
d. 在」Remote Connection」對話框中, 點擊」Network TCP/IP」, 然後, 點擊」Settings」.
e. 在」Target computer name of address」輸入框中, 鍵入IA64計算機的名稱. 點擊」ok」兩次, 關閉對話框.
f. 在Visual Studio C++ IDE中, 在」Project」菜單上, 點擊」Settings」, 在左側面板, 展開」MyApplication」, 然後, 點擊」Debug」標簽. 你將注意到」Executable for debug session」輸入框包含了MyApplication.exe的路徑, 看起來是C:\<X86Path>\MyApplication.exe.
g. 在」Remote executable path and file name」輸入框中, 鍵入」MyApplication.exe」(沒有雙引號)所在的全路徑, 這個路徑看起來像: \\<X86ComputerName>\C$\<x86Path>\MyApplication.exe(沒有引號).點擊」OK」關閉該窗口.
h. 按下CTRL+F5或在」Build」菜單上點擊」Execute MyApplication.exe」, 開始運行這個.exe文件, 這個.exe文件現在是運行在IA64計算機上.
注意:如果MyApplication是一個MFC應用程序並且這個工程用到了MFC相關的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中.
譯注:\Microsoft SDK\NoRedist\Win64存放的是debug和release版本的MFC, ATL相關dll(64位), 實際上你也可以拷貝這些dll文件到你的可執行.exe文件所在同一目錄中.
這些dll文件是:
Mfc42d.dll
Mfco42d.dll
Msvcrtd.dll
譯注補充: 編譯/鏈接中經常遇到的問題:
鏈接出錯, 通常是RTC, cookie錯誤, 參見下面鏈接設置:
鏈接中如出現 Error Spawing bscmake.exe
去掉勾選編譯參數(Project settings > c/c++): Generate Browse Info
如果仍不成功, 請仔細檢查在菜單項」Tools」 > 「Options」 , 定位在」Directories」標簽, 選擇」Executable Files」, 在下面的目錄列表中, 將<SDK安裝目錄>\bin路徑放在第一項.(這個目錄中的64位編譯器和鏈接器程序將重載舊的32位設置).
如果你是動態庫和主應用程序鏈接, 必須保持用的是相同運行時庫, 例如: 全部都是Multi-Threads DLL(點擊」Project」 > 「Settings」, 選擇」C/C++」標簽, 在」Category」下拉列表中選擇」Code Generation」, 在下面」Use runtime library」下拉列表中選擇).
用Visual C++ .NET IDE創建一個64位應用程序
警告: 在已安裝Visual Studio .NET的計算機上, 請不要同時安裝64位版本的WinDbg調試器工具, 請讀平台SDK的Readme.doc(位置在: C:\Program Files\Microsoft SDK\Bin\Win64\Readme.doc).
設置64位創建環境變數, 用下面任何一種方式都行:
參照前文相同部分.
開始啟動Visual C++ .NET, 並用剛才我們創建好的64位環境
1. 在64位SDK環境設置的命令行窗口中,打開Visual Studio .NET.
2. 鍵入」devenv /useenv」(沒有引號), 然後, 點擊」OK」. 現在include, library, executable目錄被設置成為64位SDK所在目錄.
注意: 如果Devent.exe不在當前路徑(通常是在系統環境變數Path中未指定Visual Studio .NET安裝目錄), 請改變文件夾路徑到<Visual Studio .NET安裝目錄>\Microsoft Visual Studio .NET\Common7\IDE, 然後再運行上述命令.
警告:在你運行這個命令後, Visual Studio .NET IDE就被設置成為64位的開發環境, 如果你想清除這個環境, 在打開一個新的Visual Studio .NET IDE之前, 刪除在C:\Documents and Settings\<Username>\Local Settings\Application Data\Microsoft\VisualStudio\7.0 下的Vccomponents.dat文件.
添加一個64位調試配置
1. 打開一個已存在的32位工程(例如, MyApplication).
2. 在」Build」菜單上, 點擊」Configuration Manager」.
3. 在」Active Solution Configurations」列表中, 點擊」New」.
4. 在」New Solution Configurations」對話框中, 在」Solution Configuration Name」下面選擇」Debug64」(不包含引號), 並且在」Copy Settings From」下面選擇」Debug」.
5. 點擊」OK」.
6. 在」Configuration Manager」對話框中, 在」Active Solution Configuration」列表中, 點擊選擇」Debug64」, 然後點擊」OK」.
修改編譯器和鏈接器設置
由於64位的編譯器和鏈接器的參數配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟:
1. 在」Solution」(中文:解決方案)瀏覽窗口中, 右鍵」Project」, 然後, 點擊」Properties」.
2. 在」C/C++」節點, 選擇」General」. 設置」Debug Information Format」到」Program Database」(對應的編譯選項是/Zi).
3. 在」C/C++」節點中, 選擇」Code generation」. 設置」Buffer Security Check」到」No」(對應的編譯選項是/GS).
4. 在」Linker」節點, 選擇」Command Line」.在」Additional Options」下面, 添加」/MACHINE:IA64」(沒有引號).
5. 如果你的應用程序是基於MFC的,你必須添加MFC路徑以避免收到鏈接錯誤:LNK1104 on the Mfc42d.lib file.
添加MFC路徑, 按下面步驟:
a. 在」Tools」菜單上, 點擊」Options」.
b. 在」Projects」下面, 選擇」VC++ Directories」. 在」Show directories」列表中, 選擇」Library Files」.如果庫路徑沒有列出, 添加這個庫路徑"\Microsoft SDK\lib\IA64\mfc"(沒有引號).
注意:如果MyApplication是一個MFC應用程序並且這個工程用到了MFC相關的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中.
這些dll文件是:
Mfc42d.dll
Mfco42d.dll
Msvcrtd.dll
完成這些後, 就可以build 64位可執行程序了.
調試工程參照Visual C++ 6.0 IDE部分.
更多參考在:
64-Bit Programming with Visual C++
64位程序移植問題設置64位創建環境變數, 用下面任何一種方式都行:
方式一:
點擊」開始」菜單, 指向 「Microsoft Platform SDK」 > 「Open Build Environment Windows」 > 「Set Windows XP 64 Build Environment」, 然後點擊」Set Windows XP 64 Build Environment (Debug)」, 這時, 一個控制台窗口將顯示, 一行文本顯示像」 the build environment set for a 64-bit」.
方式二:
在命令提示符下,
1. 點擊」開始」菜單, 然後點擊」運行」
2. 鍵入」command.exe」(沒有引號), 然後, 點擊」確定」
3. 變化當前目錄到C:\Program Files\Microsoft SDK(你的SDK安裝目錄), 然後鍵入」SetEnv.bat /XP64」(沒有引號)
現在, 開始啟動Visual C++ 6.0並用我們剛才配置好的創建環境
1. 在同一個命令窗口中(也就是你剛才設置64位環境的命令行窗口), 打開Visual Studio.
2. 鍵入 「Msdev /useenv」(沒有引號). 請注意, 不要打開一個新的命令行窗口, 再去打開Msdev.exe, 現在Visual C++ 6.0 IDE已經顯示, 並且include, library及executable目錄均被設置為64位的創建環境(注:查看這些配置, 點擊Tools > Options > Directories, 在」Show directories for: 「下拉列表中查看相應目錄配置).
另外, 如果Msdev.exe不在當前路徑下(通常是系統環境變數沒有相應指示), 變化目錄到你所安裝Visual Studio的目錄下, 例如: \Microsoft Visual Studio\Common\Msdev98\Bin, 然後, 再鍵入Msdev.exe.
譯注: 在前面的設置64位創建環境變數 , 已經將IDE的executable執行目錄調整到SDK的相應目錄下面, 也就是說, 作為可執行程序: 編譯器和鏈接器是在SDK目錄中, 而不再是默認的\Microsoft Visual Studio\Common\Msdev98\Bin
添加一個64位Debug配置
1. 在Visual C++ IDE中, 打開一個已經在的32位工程(例如: MyApplication)
2. 在」Build」菜單上, 點擊」Configurations」.
3. 在」Configurations」對話框上, 點擊」Add」.
4. 在」Add Project Configuration」對話框上, 設置」Configuration」到Debug64, 然後, 在」Copy Settings from」列表框中點擊」MyApplication – Win32 Debug」
5. 點擊」OK」完成設置, 點擊」Close」關閉.
設置激活配置為64位
1. 在」Build」菜單上, 點擊」Set Active Configuration」.
2. 點擊」MyApplication – Win32 Debug64」, 然後, 點擊」OK」.
修改編譯器和鏈接器的參數配置
由於64位的編譯器和鏈接器的參數配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟:
1. 在」Project」菜單中,點擊」Settings」.
2. 在」Project Settings」對話框中, 點擊」General」標簽. 在」Output directories」, 在」Intermediate files」 和」Output files」輸入框中, 鍵入」Debug64」(沒有引號)
3. 在」C/C++」標簽上, 在」Debug info」下拉列表中, 選擇」Program database(參數選項對應是 /Zi)
4. 在」Link」標簽上, 在」Project options」的輸入框中, 變化」/machine:I386」(沒有引號)到」/machine:IA64」(沒有引號)
譯注: 正確設置應是: /machine:AMD64
5. 在」View」菜單上, 點擊」Workspace」.
6. 然後, 移除幫助文件MyApplication.hpj
7. 如果你的應用程序是基於MFC的, 你必須添加一個MFC路徑以避免鏈接錯誤:LNK1004 on the Mfc42d.lib, 請按下面步驟操作:
a. 在」Tools」菜單上, 點擊」Options」.
b. 在」Directories」標簽上, 在」Show directories」下拉列表中, 選擇」Library Files」, 現在添加你的平台庫所在路徑: 」\Microsoft SDK\lib\IA64\mfc」(沒有引號)
譯注補充: 在」C/C++」標簽上, 在」Preprocessor definitions」輸入框中將WIN32改成WIN64
創建並調試這個工程
現在Build這個工程, 生成64位應用程序, 這個應用程序被部署在一個IA64計算機上.
要在Visual C++ 6.0中運行這個.exe文件, 按下面步驟:
注意: 你不能夠在Visual C++ 6.0 IDE中調試這個.exe文件.
a. 在你的IA64計算機上, 創建一個文件夾: C:\VC6MSVCMON
從X86(32位)計算機上拷貝這些文件到這個新創建的文件夾中:
Msvcmon.exe
Dm.dll
Msdis110.dll
Tln0t.dll
上面這些文件應在你的Visual C++ 6.0安裝目錄下:
\Visual Studio\Common\MSDev98\Bin
b. 在拷貝完這些文件後, 在IA64計算機上運行Msvcmon.exe, 然後, 點擊」Connect」.
c. 在X86(32位)計算機上, 打開Visual C++ 6.0 IDE, 在」Build」菜單上, 點擊」Debugger Remote Connection」.
d. 在」Remote Connection」對話框中, 點擊」Network TCP/IP」, 然後, 點擊」Settings」.
e. 在」Target computer name of address」輸入框中, 鍵入IA64計算機的名稱. 點擊」ok」兩次, 關閉對話框.
f. 在Visual Studio C++ IDE中, 在」Project」菜單上, 點擊」Settings」, 在左側面板, 展開」MyApplication」, 然後, 點擊」Debug」標簽. 你將注意到」Executable for debug session」輸入框包含了MyApplication.exe的路徑, 看起來是C:\<X86Path>\MyApplication.exe.
g. 在」Remote executable path and file name」輸入框中, 鍵入」MyApplication.exe」(沒有雙引號)所在的全路徑, 這個路徑看起來像: \\<X86ComputerName>\C$\<x86Path>\MyApplication.exe(沒有引號).點擊」OK」關閉該窗口.
h. 按下CTRL+F5或在」Build」菜單上點擊」Execute MyApplication.exe」, 開始運行這個.exe文件, 這個.exe文件現在是運行在IA64計算機上.
注意:如果MyApplication是一個MFC應用程序並且這個工程用到了MFC相關的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中.
譯注:\Microsoft SDK\NoRedist\Win64存放的是debug和release版本的MFC, ATL相關dll(64位), 實際上你也可以拷貝這些dll文件到你的可執行.exe文件所在同一目錄中.
這些dll文件是:
Mfc42d.dll
Mfco42d.dll
Msvcrtd.dll
譯注補充: 編譯/鏈接中經常遇到的問題:
鏈接出錯, 通常是RTC, cookie錯誤, 參見下面鏈接設置:
鏈接中如出現 Error Spawing bscmake.exe
去掉勾選編譯參數(Project settings > c/c++): Generate Browse Info
如果仍不成功, 請仔細檢查在菜單項」Tools」 > 「Options」 , 定位在」Directories」標簽, 選擇」Executable Files」, 在下面的目錄列表中, 將<SDK安裝目錄>\bin路徑放在第一項.(這個目錄中的64位編譯器和鏈接器程序將重載舊的32位設置).
如果你是動態庫和主應用程序鏈接, 必須保持用的是相同運行時庫, 例如: 全部都是Multi-Threads DLL(點擊」Project」 > 「Settings」, 選擇」C/C++」標簽, 在」Category」下拉列表中選擇」Code Generation」, 在下面」Use runtime library」下拉列表中選擇).
用Visual C++ .NET IDE創建一個64位應用程序
警告: 在已安裝Visual Studio .NET的計算機上, 請不要同時安裝64位版本的WinDbg調試器工具, 請讀平台SDK的Readme.doc(位置在: C:\Program Files\Microsoft SDK\Bin\Win64\Readme.doc).
設置64位創建環境變數, 用下面任何一種方式都行:
參照前文相同部分.
開始啟動Visual C++ .NET, 並用剛才我們創建好的64位環境
1. 在64位SDK環境設置的命令行窗口中,打開Visual Studio .NET.
2. 鍵入」devenv /useenv」(沒有引號), 然後, 點擊」OK」. 現在include, library, executable目錄被設置成為64位SDK所在目錄.
注意: 如果Devent.exe不在當前路徑(通常是在系統環境變數Path中未指定Visual Studio .NET安裝目錄), 請改變文件夾路徑到<Visual Studio .NET安裝目錄>\Microsoft Visual Studio .NET\Common7\IDE, 然後再運行上述命令.
警告:在你運行這個命令後, Visual Studio .NET IDE就被設置成為64位的開發環境, 如果你想清除這個環境, 在打開一個新的Visual Studio .NET IDE之前, 刪除在C:\Documents and Settings\<Username>\Local Settings\Application Data\Microsoft\VisualStudio\7.0 下的Vccomponents.dat文件.
添加一個64位調試配置
1. 打開一個已存在的32位工程(例如, MyApplication).
2. 在」Build」菜單上, 點擊」Configuration Manager」.
3. 在」Active Solution Configurations」列表中, 點擊」New」.
4. 在」New Solution Configurations」對話框中, 在」Solution Configuration Name」下面選擇」Debug64」(不包含引號), 並且在」Copy Settings From」下面選擇」Debug」.
5. 點擊」OK」.
6. 在」Configuration Manager」對話框中, 在」Active Solution Configuration」列表中, 點擊選擇」Debug64」, 然後點擊」OK」.
修改編譯器和鏈接器設置
由於64位的編譯器和鏈接器的參數配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟:
1. 在」Solution」(中文:解決方案)瀏覽窗口中, 右鍵」Project」, 然後, 點擊」Properties」.
2. 在」C/C++」節點, 選擇」General」. 設置」Debug Information Format」到」Program Database」(對應的編譯選項是/Zi).
3. 在」C/C++」節點中, 選擇」Code generation」. 設置」Buffer Security Check」到」No」(對應的編譯選項是/GS).
4. 在」Linker」節點, 選擇」Command Line」.在」Additional Options」下面, 添加」/MACHINE:IA64」(沒有引號).
5. 如果你的應用程序是基於MFC的,你必須添加MFC路徑以避免收到鏈接錯誤:LNK1104 on the Mfc42d.lib file.
添加MFC路徑, 按下面步驟:
a. 在」Tools」菜單上, 點擊」Options」.
b. 在」Projects」下面, 選擇」VC++ Directories」. 在」Show directories」列表中, 選擇」Library Files」.如果庫路徑沒有列出, 添加這個庫路徑"\Microsoft SDK\lib\IA64\mfc"(沒有引號).
注意:如果MyApplication是一個MFC應用程序並且這個工程用到了MFC相關的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中.
這些dll文件是:
Mfc42d.dll
Mfco42d.dll
Msvcrtd.dll
完成這些後, 就可以build 64位可執行程序了.
調試工程參照Visual C++ 6.0 IDE部分.
更多參考在:
64-Bit Programming with Visual C++
64位程序移植問題