草庐IT

符号化

全部标签

c++ - 如何在 2 个不同的共享库中调用具有相同符号的函数?

我有几个用C++编写的同一个库的版本。我需要并排比较它们。这些库使用相同的命名空间、函数名称并采用相同的参数。当我同时链接两个或多个库时,是否有任何方法可以控制我使用哪个版本的库? 最佳答案 您无法链接两个具有相同符号的库并同时访问这两个库。但是,您可以构建自己的瘦包装器库来消除两个版本化库的歧义:定义一个抽象类Wrapper,使用抽象虚函数实现目标库的功能在名为WrapperImpl的类中定义Wrapper的实现,该类从虚拟方法调用目标库定义一个独立的方法Wrapper*MakeImpl返回newWrapperImpl()多次将W

c++ - 未解析的外部符号 _IID/_CLSID

我使用MSVC2010创建了一个带有简单默认ATL对话框的默认ATL项目。然后我将第二个项目添加到名为MyControls的解决方案中,我在向导的帮助下在其中创建了ATLDHTML控件。然后我将ATLDHTML控件放置到ATL对话框中。现在我想在ATL对话框的OnInitDialog函数中调用该ATLDHTML控件的一些方法。为了能够调用这样的电话:CComPtrptr;HRESULThr=GetDlgControl(IDC_ACTIVEX_CONTROL_DHTML,IID_IDHTMLControl,(void**)&ptr);我包含了来自MyControls项目的文件DHTMLC

c++ - SetDllDirectory 因某些 unicode 符号而失败

我正在使用SetDllDirectory(实际上是SetDllDirectoryW)从特定目录加载一些延迟加载的库。就像if(SetDllDirectory(directory.c_str())==0){ERROR_MSG("Failedtosetthecurrentdlldirectory[%d]\n",GetLastError());}所以一切正常,大多数时候,"f:/source/trunk11"正常等等但是当使用"f:/source/trunkGesthießes!№;%()_@#$^&"调用时,我从GetLastError得到了ERROR_INVALID_PARAMETER。

c++ - 方法声明后的引用符号 C++

在什么情况下使用const&而不是仅使用const来声明方法或函数是有益的?我知道使用const表示此方法不会修改类的成员,但是当我在后面添加引用符号时到底发生了什么?示例:intmyclass::getInteger()const&{returntheInt;}顺便问一下,这是所谓的引用限定符吗?更重要的是关于getInteger方法,引用符号说明了什么?谢谢! 最佳答案 是的,这是一个ref-qualifiedmemberfunction.右侧的左值引用表示法使该函数只能在myclass的左值上调用,即:myclassc;c.g

c++ - 是基类型的有符号/无符号部分还是限定符

Wikipage声称C++中的限定符是const和volatile。Thisanswer告诉unsigned、unsigned和short等也是限定符。虽然问题确实提到了它是关于C的,但Wikipage在C方面也没有说明。对于C,限定符是const、volatile、restrict和_Atomic。StackOverflow的qualifier标签的扩展消息框说Aqualifieraddsanextra"quality",suchasspecifyingvolatilityorconstnessofavariable“Addanextraquality”,从引文来看,singed/u

c++ - 去修饰的 C++ 符号的歧义

_ZNSaIwEC1Ev_ZNSaIwEC2Ev这两个C++符号不同但被分解(使用C++filt或类似实用程序)为相同的形式:std::allocator::allocator()std::allocator::allocator()为什么会这样?可能是解码器的缺陷还是其他原因? 最佳答案 g++使用由ItaniumABI指定的名称修改方案(和其他实现细节).在关于manglingofconstructorsanddestructors的部分,我们看到:::=C1#completeobjectconstructor::=C2#bas

c++ - 奇数重复符号错误

对于一个学校项目,类(class)被要求编写一个String类来模仿STLstring类。我已经编写了所有代码,但链接器似乎被我的一个运算符捕获了。共有三个文件,String.h、String.cpp、test2.cpp我的Makefile看起来像CC=gccCXX=g++CXXFLAGS+=-Wall-WextraLDLIBS+=-lstdc++all:test2test2:test2.oString.otest2.o:test2.cppString.hString.o:String.cppString.hmake输出如下:g++-Wall-Wextra-c-otest2.otest

c++ - C++ 中的无符号移位模板

我想在C++中进行无符号移位。这是我的示例代码。它的问题是它不是通用的。这段代码是完全错误的。它不适用于longs,也不适用于较小的类型,如char。我尝试了(unsignedT)但这是一个语法错误。我如何在没有专门化的情况下使这个通用?#includetemplateTunsigned_shift(constT&t,ints){return((unsignedint)t)>>s;}intmain(){assert(unsigned_shift(-1,2)==(-1u>>2));assert(unsigned_shift((char)-1,2)==64);}

c++ - 符号如何影响调用堆栈遍历?

我正在尝试使用windbg分析故障转储,但根据加载的符号,我得到了不稳定的故障转储。我的简单理解是,符号只是帮助指向堆栈所指的内容,而堆栈本身并没有改变。这显然是错误的,但现在我不知道我到底在看什么。这是加载了所有符号的调用堆栈:0:000>kn#ChildEBPRetAddr000012e1207d61f60fntdll!ZwGetContextThread+0x12010012e130000f0005ntdll!RtlFreeHeap+0x711WARNING:FrameIPnotinanyknownmodule.Followingframesmaybewrong.020012e1

c++ - 项目符号 : Load/Save collisionshape

我试图防止循环所有三角形并将每个三角形添加到btTriangleMesh。(只有加载速度要快,保存速度可以忽略不计。)那么从文件加载碰撞数据最快的方法是什么?这两个怎么样:保存一个Vertex(bt3Vector)&Index(DWORD)数组并加载调整btTriangleMesh的大小并立即设置数据。使用serializeSingleShape()进行保存和加载类似于ReadBulletSample(或初始化一个新的btDynamicsWorld,使用BulletWorldImporter读取文件,获取碰撞对象并清理btDynamicsWorldvar)如果还有其他方法,请告诉我。模