我创建一个UDP套接字(AF_INET
,SOCK_DGRAM
,IPPROTO_UDP
通过Winsock的),并试图recvfrom
在此套接字上,但它总是返回-1,我得到WSAEINVAL(10022).为什么?
当我bind()
的端口,这不会发生,但我已经读到绑定客户端的套接字是非常蹩脚的.
我正在向我的服务器发送数据,该服务器回答或至少尝试过.
Inc::STATS CConnection::_RecvData(sockaddr* addr, std::string &strData)
{
int ret; // return code
int len; // length of the data
int fromlen; // sizeof(sockaddr)
char *buffer; // will hold the data
char c;
//recv length of the message
fromlen = sizeof(sockaddr);
ret = recvfrom(m_InSock, &c, 1, 0, addr, &fromlen);
if(ret != 1)
{
#ifdef __MYDEBUG__
std::stringstream ss;
ss << WSAGetLastError();
MessageBox(NULL, ss.str().c_str(), "", MB_ICONERROR | MB_OK);
#endif
return Inc::ERECV; …
Run Code Online (Sandbox Code Playgroud) 我想让VS将构建过程后创建的.lib文件复制到特定文件夹.所以我去了项目配置,后期构建事件,并输入以下命令:
if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
Run Code Online (Sandbox Code Playgroud)
但是,在点击"构建"后,我没有收到复制过程,而是收到以下错误:
错误MSB3073:命令"如果存在C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy"C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib""C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib"/ Y
:VCEnd"退出代码2.
我也想知道:VCEnd
错误信息的命令字符串< - 也许这就是原因?如何解决这个问题?
任何帮助和提示都会被愉快地消耗掉:)
部分解决方案
编辑:当xcopy询问这是一个文件还是一个目录时,它看起来像重命名部分(Inc.lib
to z.lib
)造成麻烦...当我只是将原来命名的文件复制到一个目录而不是复制重命名时,它可以正常工作
msbuild xcopy post-build-event visual-studio visual-studio-2012
我的理解是,由于两个问题,虚函数可能会导致性能问题:vtable引起的额外derefencing以及编译器无法在多态代码中内联函数.
如果我将变量指针向下转换为其确切类型怎么办?那还有额外的费用吗?
class Base { virtual void foo() = 0; };
class Derived : public Base { void foo() { /* code */} };
int main() {
Base * pbase = new Derived();
pbase->foo(); // Can't inline this and have to go through vtable
Derived * pderived = dynamic_cast<Derived *>(pbase);
pderived->foo(); // Are there any costs due to the virtual method here?
}
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我,由于我将对象转换为其实际类型,编译器应该能够避免使用虚函数的缺点(例如,它应该能够内联方法调用,如果它想要).它是否正确?
在我转发后,编译器是否真的知道pderived是Derived类型的?在上面的例子中,看到pbase是Derived类型的微不足道,但在实际代码中它可能在编译时是未知的.
既然我已经写下来了,我想由于Derived类本身可以被另一个类继承,将pbase向下转换为Derived指针实际上并不能确保编译器的任何内容,因此它无法避免成本虚拟功能?
我在SDI(启用Doc/View的)项目中写了一些带有几个标准对话框的porgram.
现在,我想把它发送给一些朋友,我确实设置了Use of MFC
Use MFC in a static library
.
但是当我尝试构建解决方案时,我收到以下错误:
错误LNK2001:未解析的外部符号_IID_IWICImagingFactory
我的问题是,我不知道这个接口id到底是什么,因为我没有手动编写任何COM代码或使用任何图像工厂的东西或相等...
我有点迷失了...
任何人都可以告诉我如何解决这个问题并使其与静态MFC使用一起工作?
提前致谢!
c++ mfc visual-studio-2010 unresolved-external visual-studio
我有一些测试代码,我提前添加了其余的代码,所以其余的代码永远不会在测试中达到.由于我设置了警告级别4,因此会产生c4702:无法访问代码警告
我试过像这样禁用:
//do something
return 0;
/*-------------------------------------------------------------------------*/
#pragma warning(disable: 4702)
//real code
Run Code Online (Sandbox Code Playgroud)
但编译器仍然呻吟.因为我已经设置将每个警告都视为错误,这不会编译......
我正在使用Visual Studio 2012 Premium ...
任何帮助都将很高兴.
warnings compiler-warnings suppress-warnings visual-studio visual-studio-2012
假设我们有:
foo(A&& a);
Run Code Online (Sandbox Code Playgroud)
如果你这样做
A a;
foo(a);
Run Code Online (Sandbox Code Playgroud)
它不会编译,抱怨不能将左值绑定到A &&.那很好.
但是,鉴于std :: move的签名,
template<class T> typename remove_reference<T>::type&& std::move(T&& a);
Run Code Online (Sandbox Code Playgroud)
看起来它需要一个右值引用,就像在foo中一样,为什么下面的代码符合?
A a;
std::move(a);
Run Code Online (Sandbox Code Playgroud)
是不是a
一个左值?
furthur,据说编译将实例化:
typename remove_reference<A&>::type&& std::move(A& && a);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么不是:
typename remove_reference<A>::type&& std::move(A && a);
Run Code Online (Sandbox Code Playgroud)
它看起来像是a
类型A
,而不是A&
.
我想有一个嵌套值的模板,应该由给定的初始化函数初始化:
template <typename T, T(INIT)()> struct Foo
{
T value = INIT();
};
Run Code Online (Sandbox Code Playgroud)
它可以这样使用:
// Some random type only instanceable through factory()
struct Bar
{
int bar{};
private:
// The only way to create a Bar is through factory()
friend Bar factory();
Bar() {};
};
Bar factory() { return {}; }
Foo<Bar, factory> foo;
Run Code Online (Sandbox Code Playgroud)
但是,如果没有提供函数,模板应该尝试默认初始化嵌套值,所以我试图专门化模板:
template <typename T> struct Foo<T, nullptr>
{
T value{};
};
Run Code Online (Sandbox Code Playgroud)
我的想法是这样使用它:
struct Baz{};
Foo<Bar, factory> foo; // Nested Bar have Bar::bar initialized through factory function. …
Run Code Online (Sandbox Code Playgroud) 我挖了一个旧项目并想编译它,但收到了几个错误,其中一些是c2664:
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'CUser *' to 'CUser *&&'
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'unsigned long' to ' unsigned long &&'
Run Code Online (Sandbox Code Playgroud)
相关的代码部分是:
//typedef for the userdata map
typedef std::map<unsigned long, std::pair<CUser*,userstatus*>> UserDataMapType;
//...
Inc::incret CUserManager::AddUser(unsigned long ID, CUser* pUser, userstatus* pUserStatus)
{
//...
std::pair<UserDataMapType::iterator, bool> ret = m_mapUserData.insert(std::make_pair<unsigned long, std::pair<CUser*, userstatus*>>(ID, std::make_pair<CUser*, userstatus*>(pUser, pUserStatus)));
//...
}
Run Code Online (Sandbox Code Playgroud)
我试图制作函数参数const
,但这没有帮助.
它确实在VS2010中编译得很好.
请帮我找到导致此问题的原因以及解决方法.
我开始使用.NET Core和ASP.NET Core进行编程,在阅读了许多Docs/Tutorials后,我仍然不确定如何在我的.NET-Core-App中使用Nuget-(Meta-)软件包.
(就像这里列出的一些
.NET Core的关键NuGet包
).但是因为他们说这些是"key"
包我会假设有更多.但是哪个?
我有一个作为LocalSystem运行的服务,它在登录用户的会话中创建一个进程。然后该服务创建一个命名管道,客户端连接到该命名管道进行读写。根据https://msdn.microsoft.com/en-us/library/aa365600%28v=vs.85%29.aspx,客户端只能从管道中读取(它不是 Admin ,不是 Creator ,也不是 LocalSystem )。
我创建了一个安全描述符来授予用户读写访问权限。但这没有用。所以我尝试向每个人组授予读写访问权限。但这也行不通。我的客户端返回的错误代码始终是 ACCESS_DENIED (5)。
我很高兴知道我做错了什么。
编辑:如果我不创建自定义安全描述符并且只是打开管道,GENERIC_READ
它就可以工作(但只能读取)。
EDIT2我想学习如何正确地做到这一点。我仍然希望成为只有登录用户才能写入的权限。不是每个人(这只是为了测试)。
服务代码(注释掉我用于获取用户 sid 的代码):
PSID EveryoneSID = nullptr;
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
if(!AllocateAndInitializeSid(&SIDAuthWorld, 1,
SECURITY_WORLD_RID,
0, 0, 0, 0, 0, 0, 0,
&EveryoneSID))
{
throw(std::runtime_error("Failed to initialize group sid: " + std::to_string(GetLastError())));
}
//TOKEN_USER* tokeninfo = nullptr;
//DWORD tokeninfolen = 0;
//DWORD outlen = 0;
//// Query token info size
//if(!GetTokenInformation(UserToken,
// TokenUser,
// tokeninfo,
// tokeninfolen,
// &outlen)) …
Run Code Online (Sandbox Code Playgroud) c++ ×6
templates ×2
.net-core ×1
asp.net-core ×1
c++11 ×1
inheritance ×1
mfc ×1
msbuild ×1
nuget ×1
performance ×1
pipe ×1
std-pair ×1
visual-c++ ×1
vtable ×1
warnings ×1
winapi ×1
windows ×1
winsock ×1
xcopy ×1