我正在尝试使用Visual Studio 2005创建一个项目的x64版本.它目前因链接器错误C1905失败,"前端和后端不兼容(必须针对相同的处理器)."
从我收集的内容来看,这基本上是说我的x64版本试图与x86模块链接.不幸的是,这个项目链接了很多不同的库.我不确定导致问题的是哪一个.
有没有办法从Visual Studio中获取更多信息?
我希望这个问题不是太主观,但为什么Windows被认为是一个不适合实时系统和高性能服务器的操作系统?是否有任何技术论文或研究可以衡量它与*nix替代品相比的性能?
我从来没有真正听说过为什么开发人员反对在这些类型的系统中使用Windows,除了极其常见的"Windows不是实时操作系统"声明之外,好像它是某种众所周知的事实并不是需要证明是合理的.
请注意,我问的是Windows CE/Windows Server,而不是操作系统的桌面版本.
我按照文档创建了一个基本的增量源生成器,它输出用属性标记的类的副本:
// Code found in my project
[Copy]
public class MyClass
{
public int Value { get; set; }
}
// Output from the source generator
public class Copy_MyClass
{
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
源代码生成本身工作得很好,但在 Visual Studio 2022 中使用它时我遇到了两个问题:
例如,如果我使用Foo[Copy] 属性创建一个新类,然后尝试在代码中引用,Visual Studio 将显示未定义的Copy_Foo错误。Copy_Foo
[Copy]
public class Foo { }
public static class TestCopy
{
public static void Test()
{
Copy_Foo foo = …Run Code Online (Sandbox Code Playgroud) std::atomic<T>::compare_exchange_*通过引用获取预期值的原因是什么,而不是按值计算?
我有一个在网络服务帐户下运行的服务.该服务只是设置一个命名管道并侦听连接:
NamedPipeServerStream listeningPipe = new NamedPipeServerStream("ourservicepipe",
PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message, PipeOptions.Asynchronous);
listeningPipe.BeginWaitForConnection(OnPipeConnected, listeningPipe);
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序在同一台机器上的标准用户帐户上运行.它尝试连接到服务创建的命名管道:
NamedPipeClientStream pipe = new NamedPipeClientStream(".", "ourservicepipe",
PipeDirection.InOut, PipeOptions.Asynchronous);
pipe.Connect(2000);
pipe.ReadMode = PipeTransmissionMode.Message;
Run Code Online (Sandbox Code Playgroud)
当我打电话时Connect,最终会抛出一个InvalidOperationException.如果我在同一个用户上运行该服务,它连接正常.如果我以管理员身份运行客户端,它连接正常.这让我相信问题在于权限,但我不知道在安装过程中需要设置哪些权限.
如何允许客户端连接到服务器,而不要求客户端以管理员身份运行?
是否可以从Boost.ASIO的套接字类中分离本机套接字?如果是这样,怎么办呢?我似乎无法在文档中找到任何明显的东西.
快速概述我正在尝试完成的任务:我有一个使用Boost.ASIO进行连接并进行协商的类,然后在成功时传回本机Windows SOCKET或在失败时传回0.
除非我弄错了,否则当我的boost :: asio :: basic_socket被破坏时,本机套接字将被关闭并释放.
为什么C++标准包含atomic_store或atomic_load重载shared_ptr,但不是weak_ptr?
这只是一个疏忽,还是有没有提供原子操作的实际原因weak_ptr?
我想提前道歉,因为这不是一个很好的问题.
我有一个服务器应用程序在专用的Windows服务器上作为服务运行.非常随机,这个应用程序崩溃,并没有提示导致崩溃的原因.
当它崩溃时,事件日志有一个条目表明应用程序失败,但没有提供原因的线索.它还提供了有关故障模块的一些信息,但它似乎不太可靠,因为故障模块通常在每次崩溃时都不同.例如,最新的说它是ntdll,前一个说它是libmysql,之前的那个说它是netsomething,依此类推.
应用程序中的每个线程都包含在try/catch (...)(从异常处理程序抛出的任何东西/未特别捕获),__try/__except(结构化异常)和try/catch(特定C++异常)中.应用程序使用/ EHa编译,因此catch all也将捕获结构化异常.
所有这些异常处理程序都做同样的事情.首先,创建崩溃转储.其次,将一个条目记录到磁盘上的新文件中.第三,在应用程序日志中记录一个条目.在这些崩溃的情况下,没有发生这种情况.最底层的异常处理程序(the try/catch (...))什么都不做,它只是终止线程.主应用程序线程处于睡眠状态,无法抛出异常.
应用程序日志文件只是停止记录.不久之后,监视服务器的进程注意到它不再响应,发送警报并再次启动它.如果服务器监视器注意到服务器仍在运行,但只是没有响应,则需要转储该进程并报告此情况,但这不会发生.
除了未捕获的异常之外,我可以提出的这种行为的唯一另一个原因是呼叫exit或类似.搜索代码不会调用任何可以终止进程的函数.我还确保程序没有正常终止(即服务管理器的停止请求).
我们已经尝试使用windbg附加运行它(没有机会使用Visual Studio,开销太高),但是当崩溃发生时它没有报告任何内容.
是什么导致应用程序崩溃?我们开始耗尽选项,并认为它可能是硬件故障,但这对我来说似乎不太可能.
我尝试使用 执行此操作GetEffectiveRightsFromAcl,但对于由于我所属的组而被拒绝的文件,它没有返回正确的访问掩码。
例如,我有一个文件,unreadable.txt. 如果我拒绝当前用户的写访问权限unreadable.txt,则访问掩码会正确显示我没有写访问权限。但是,如果我拒绝“经过身份验证的用户”组的写入访问权限,则访问掩码意味着我拥有完全访问权限(但我没有)。
我的替代方法是手动迭代 Ace 列表并将我的 SID 与每个条目进行比较,但我无法找到一种干净或简单的方法来检查 Ace 是否属于某个组,以及当前用户是否属于该组。
作为扩展名,该文件可能不存在(即,它是一个新文件,即将写入),在这种情况下需要检查对该目录的访问。
对此有什么好的解决办法吗?似乎应该存在一种更简单的方法来执行此操作,而无需实际尝试读取/写入有问题的文件。
我有一个第三方库充当HTTP服务器.我传递了一个地址和端口,然后用它来监听传入的连接.此库以这样的方式进行侦听,即它不会接收端口的唯一用法以及它所绑定的地址.结果,我可以多次在同一个端口上侦听.
我需要在同一个进程中运行此HTTP服务器的多个实例.每个实例都有一个默认端口,但如果该端口不可用,则应使用下一个可用端口.这是我的问题所在; 我最终可以在同一个端口上监听两个HTTP服务器.
我无法更改HTTP服务器的代码,如果无法侦听我提供的端口,HTTP服务器将不会提醒我,因此我必须能够在启动每个HTTP服务器之前检查端口是否已在使用中.我已经尝试通过绑定自己的套接字来检查端口是否已被监听,SO_REUSEADDR设置为FALSE且SO_EXCLUSIVEADDRUSE设置为TRUE,但是当现有HTTP服务器已经在该端口上侦听时,绑定和侦听调用都成功.
该HTTP服务器如何实现此效果,如何以这种方式准确检查是否正在侦听端口?
c++ ×7
atomic ×2
c# ×2
c++11 ×2
sockets ×2
winapi ×2
windows ×2
.net-6.0 ×1
64-bit ×1
acl ×1
boost ×1
boost-asio ×1
c ×1
crash ×1
linker ×1
module ×1
named-pipes ×1
performance ×1
permissions ×1
shared-ptr ×1
tcp ×1