‘壹’ 用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位程序移植问题