如何在Visual Studio中为一个特定的项目单独设置DLL文件的path? 现在我将其设置在环境pathvariables中,但是我希望更好地控制这个variables。
有两个基类具有相同的函数名称。 我想inheritance他们两个,并以不同的方式骑在每个方法。 我怎样才能做到这一点与单独的声明和定义(而不是定义类定义)? #include <cstdio> class Interface1{ public: virtual void Name() = 0; }; class Interface2 { public: virtual void Name() = 0; }; class RealClass: public Interface1, public Interface2 { public: virtual void Interface1::Name() { printf("Interface1 OK?\n"); } virtual void Interface2::Name() { printf("Interface2 OK?\n"); } }; int main() { Interface1 *p = new RealClass(); […]
我从源代码构buildOpenCV 3.0。 和一些额外的模块contrib回购。 而我手动设置我的VS2013项目使用生成的lib文件。 我的代码现在很简单: #include "opencv2\core\core.hpp" #include "opencv2\imgcodecs\imgcodecs.hpp" int _tmain(int argc, _TCHAR* argv[]) { cv::Mat image = cv::imread("img.jpg"); return 0; } 但是,在VS 2013社区版本中,它给了我这些错误: 我看到类似的线程 ,他们说这是由x86 / x64问题引起的。 但是我的项目已经是x86了。 而我build立的OpenCV也是针对x86(见下文)。 这是什么原因? ADD 1 OpenCV 3.0 INSTALL项目生成以下lib目录: 所以它确实是一个x86 。 我的libpathconfiguration为上面的path: 我添加了所有*d.lib文件。 下面是我的VC项目的Configuration Manager 所以它确实也是x86 。 哪里可能出错? ADD 2 我手动searchfastFree()函数。 它在opencv_core300d.lib文件中定义。 我使用dumpbin /symbols命令来检查符号。 而且我发现它的名字正像fastFree@cv@@YAXPAX@Z一样被fastFree@cv@@YAXPAX@Z 。 那为什么不能find?
假设我有一个实现两个或多个COM接口的类: class CMyClass : public IInterface1, public IInterface2 { }; 几乎我看到的每个文档都build议,当我为IUnknown实现QueryInterface()时,我显式地将此指针上传到其中一个接口: if( iid == __uuidof( IUnknown ) ) { *ppv = static_cast<IInterface1>( this ); //call Addref(), return S_OK } 问题是为什么我不能只复制这个 ? if( iid == __uuidof( IUnknown ) ) { *ppv = this; //call Addref(), return S_OK } 这些文档通常说,如果我做了后者,我将违反在同一对象上对QueryInterface()的任何调用必须返回完全相同的值的要求。 我不太明白。 他们的意思是,如果我QI()为IInterface2并调用QueryInterface()通过该指针C ++将通过这个略有不同,如果我QI()IInterface2因为C ++将每次使这一点的子对象?
有没有办法使用Visual Studio在cpp文件中禁用单个警告行? 例如,如果我捕捉到一个exception,而不处理它,我得到错误4101(未引用的本地variables)。 有没有办法忽略这个function,但否则在编译单元报告呢? 目前,我把#pragma warning (disable : 4101)放在文件的顶部,但显然只是closures整个单元。
在MSVC(在Windows)和GCC(在Linux上)编译的代码中,Ivy Bridge系统的性能差异很大。 该代码做密集matrix乘法。 我得到GCC峰值的70%,MSVC只有50%。 我想我可能已经把它们的差异分离出来了,它们是如何将以下三个内在因素进行转换的。 __m256 breg0 = _mm256_loadu_ps(&b[8*i]) _mm256_add_ps(_mm256_mul_ps(arge0,breg0), tmp0) GCC做到这一点 vmovups ymm9, YMMWORD PTR [rax-256] vmulps ymm9, ymm0, ymm9 vaddps ymm8, ymm8, ymm9 MSVC做到这一点 vmulps ymm1, ymm2, YMMWORD PTR [rax-256] vaddps ymm3, ymm1, ymm3 请问有人可以解释一下,为什么这两个解决scheme可以在性能上有如此大的差异呢? 尽pipeMSVC使用一个较less的指令,它将负载连接到mult,也许这使得它更依赖(也许负载不能乱序)? 我的意思是常春藤桥可以在一个时钟周期内完成一个AVX负载,一个AVX mult和一个AVX添加,但这需要每个操作都是独立的。 也许问题在别处? 您可以在下面的最内层循环中看到GCC和MSVC的完整汇编代码。 您可以在这里看到循环的C ++代码循环展开,以达到Ivy Bridge和Haswell的最大吞吐量 g ++ -S -masm = intel matrix.cpp -O3 -mavx -fopenmp […]
我无法让LibCurl使用Visual Studio 2013.我下载了当前版本(curl-7.33.0)并尝试按照我在此网站上find的说明操作: 在Visual 2010中使用LibCurl 但是我在我下载的文件夹中找不到curllib.lib 。 而我仍然遇到错误: 在search互联网寻求更多的帮助。 我现在得到这些错误消息。 链接到libcurl.lib似乎有问题? 这是我configuration的: 里面/ lib我有libcurl.lib和libcurl.dll UPDATE 我为Win32 MSVC下载了这个版本: http : //curl.haxx.se/download.html#Win32添加libcurl库并成功编译后,我现在得到这个错误信息: The application was unable to start correctly (0xc000007b). Click OK to close the application. 这里是我试图运行的示例代码: #include <iostream> #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, […]
下面的代码让我感到困惑 int a=2,b=5,c; c=a+++b; printf("%d,%d,%d",a,b,c); 我预计输出为3,5,8,主要是因为a ++意味着2 + 1等于3,3 + 5等于8,所以我预期3,5,8。 结果是3,5,7。 有人可以解释为什么是这样吗?
可能重复: 浮点数与浮点数相比,奇怪的输出 float f = 1.1; double d = 1.1; if(f == d) // returns false! 为什么这样?
我知道,根据C ++标准,如果新分配内存失败,它应该抛出std :: bad_allocexception。 但是我听说有些编译器如VC6(或CRT的实现?)不遵守它。 这是真的 ? 我这样问,因为在每个新的语句之后检查NULL会使代码看起来非常难看。