我需要编写一个函数来生成一个id,该id对于运行Windows操作系统的给定机器是唯一的.
目前,我正在使用WMI查询各种硬件参数并将它们连接在一起并散列它们以获得唯一的id.我的问题是,我应该使用的建议参数是什么?目前,我正在使用bios\cpu\disk数据的组合来生成唯一ID.如果每个指标有多个结果,我会使用第一个结果.
但是,我遇到了一个问题,即双引导到两个不同的Windows操作系统的机器在每个操作系统上生成不同的站点代码,理想情况下不会发生这种情况.
作为参考,这些是我目前使用的指标:
Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed
Win32_BIOS:Manufacturer
Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version
Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads
Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber
Win32_VideoController:DriverVersion, Name
Run Code Online (Sandbox Code Playgroud) 我只是想知道:我正在寻找一种方法来验证给定路径是否有效. (注意:我不想检查文件是否存在!我只想证明路径的有效性 - 所以如果文件可能存在于该位置).
问题是,我在.Net API中找不到任何东西.由于Windows支持的许多格式和位置,我宁愿使用MS-native.
由于该功能应该能够检查:
- 相对路径(./)
- 绝对路径(c:\ tmp)
- UNC-Pathes(\ some-pc\c $)
- NTFS限制,如完整路径1024个字符 - 如果我没有错误超过路径将使许多内部Windows功能无法访问文件.用Explorer重命名它仍然有效
- 卷GUID路径:"\?\ Volume {GUID}\somefile.foo
有没有人有这样的功能?
我想要一个从C++ windows DLL导出函数的简单示例.
我想看看标题,cpp文件和def文件(如果绝对需要).
我希望导出的名称不加修饰.我想使用最标准的调用约定(__stdcall?).我想使用__declspec(dllexport)而不必使用DEF文件.
例如:
//header
extern "C"
{
__declspec(dllexport) int __stdcall foo(long bar);
}
//cpp
int __stdcall foo(long bar)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图避免链接器为名称添加下划线和/或数字(字节数?).
我没有支持使用相同标头的dllimport和dllexport.我不想要任何有关导出C++类方法的信息,只需要c风格的全局函数.
UPDATE
不包括调用约定(并使用extern"C")给出了我喜欢的导出名称,但这意味着什么?是什么默认调用约定我得到什么pinvoke(.NET),声明(vb6)和GetProcAddress会期望?(我猜对于GetProcAddress,它将取决于调用者创建的函数指针).
我希望在没有头文件的情况下使用这个DLL,所以我真的不需要很多花哨的#defines来使调用者可以使用头文件.
我的回答是我必须使用DEF文件.
渲染上下文通常在背景上具有纯色(黑色或其他任何内容,请参见下图):

我想知道是否可以设置一个窗口,没有装饰和透明背景,同时允许我渲染OpenGL的东西.
这会产生三角形漂浮在屏幕上的错觉.透明背景应该允许您查看可能位于其后面的桌面或其他应用程序.
你能用源代码举例说明吗?
平台:Windows(仅限win32)
在这个帖子(大约一年前发布)中,讨论了在非交互式会话中运行Word时可能遇到的问题.那里给出的(非常强烈的)建议不会这样做.在一篇文章中,它表示"Office API都假设您在桌面上的交互式会话中运行Office,具有监视器,键盘和鼠标,最重要的是消息泵." 我不确定那是什么.(我用C#编程只用了一年左右;我的其他编程经验主要是使用ColdFusion.)
我的程序运行大量RTF文件,以提取用于构建医疗报告编号的两条信息.我没有尝试弄清楚RTF中的格式化指令是如何工作的,而是决定只在Word中打开它们并从那里拉出文本(而不是实际启动GUI).有时,程序在处理一个文件的中间打嗝,并留下了一个字线打开该文件附有(我仍然要弄清楚如何关闭一个向下).当我重新运行程序时,我当然得到一个通知,说有一个线程正在使用该文件,我是否想要打开一个只读副本?当我说"是"时,Word GUI突然突然冒出来并开始处理文件.我想知道为什么会这样; 但看起来可能一旦弹出对话框,消息泵开始将主GUI推送到Windows?
我正在将一个最初为Win32 API编写的游戏移植到Linux上(好吧,将Win32端口的OS X端口移植到Linux).
我已经QueryPerformanceCounter通过在进程启动后给出uSeconds来实现:
BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount)
{
gettimeofday(¤tTimeVal, NULL);
performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec);
performanceCount->QuadPart *= (1000 * 1000);
performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这一点,加上QueryPerformanceFrequency()给出一个恒定的1000000作为频率,在我的机器上工作得很好,给我一个包含uSeconds自程序启动以来的64位变量.
所以,这是便携式?如果内核是以某种方式或类似的方式编译的,我不想发现它的工作方式不同.不过,我很好,因为它不适用于Linux之外的其他东西.
我正在尝试使用C++解析INI文件.关于什么是实现这一目标的最佳方法的任何提示?我应该使用Windows API工具进行INI文件处理(我完全不熟悉),一个开源解决方案或尝试手动解析它?
我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.
是否有某种特殊的方式来打印到Visual Studio输出窗口?
我想在Windows下编写基本的程序集,我正在使用NASM,但我无法正常工作.
如何在Windows上没有C函数的帮助下编写和编译hello world?
我见过C++社区中的很多人(特别是freenode上的## c ++)对windows api 的使用wstrings和使用感到不满wchar_t.究竟是什么"错误"有wchar_t和wstring,如果我要支持国际化,有一些什么替代宽字符?