草庐IT

c++ - 如何从 C++ 引发将触发脚本异常处理程序的异常

我一直在网上找到这个答案的零碎内容,但不是一个非常清晰的解决方案。这就是我想要做的。1)创建一个ATL简单对象。2)向该对象添加一个返回BOOL而不是HRESULT的方法。调用者想要true/false返回值。3)向将提供e.description和e.number数据的jscript或vbscript调用者抛出异常。RE2)我发现我可以将STDMETHODIMP_(BOOL)与[local]一起使用以允许返回BOOLRE3)我发现我可以通过SetErrorInfo()传递IErrorInfo来填充错误对象我的困境是我无法弄清楚如何构建C++来跨ABI边界抛出异常,而不会导致调用者崩溃

c++ - 为 C++ 库创建自动 C 包装器?

假设我有一个C++DLL。AFAIK,没有广泛采用的C++ABI标准,因此为了确保它能正常工作并且不依赖于目标应用程序的编译器,我需要将我的库包装在C接口(interface)中。有没有什么工具可以自动生成这样的界面?如果他们可以围绕C接口(interface)生成包装器,看起来就像是原始的C++对象,那也很好,例如Foo*f=newFoo();//FooWrapper*fw=Foo_create();f->bar("test");//Foo_bar(fw,"test")转换为使用生成的CABI在我的库中调用的C函数。我知道C++是相当复杂的语言,并不是所有的东西都可以轻易地包装在C接

c++ - 如何在 GCC 5 中处理双 ABI?

我试图了解如何解决GCC5中引入的双ABI的问题。但是,我没能做到。这是一个非常简单的重现错误的例子。我使用的GCC版本是5.2。如您所见,我的主要功能(在main.cpp文件中)非常简单://main.cpp#include#includeintmain(){std::stringmessage="SUCCESS!";std::cout当我打字时/home/aleph/gcc/5.2.0/bin/g++main.cpp我收到以下错误消息:/tmp/ccjsTADd.o:Infunction`main':main.cpp:(.text+0x26):undefinedreferencet

c++ - Raspberry Pi ARM Float ABI 兼容性

我目前正在我的Ubuntu机器上对RaspberryPi执行一些交叉编译测试。我目前的理解是RaspberryPi支持硬件浮点,默认的RaspbianOS镜像是使用硬件浮点(armhf)构建的。正确吗?如果我使用“arm-linux-gnueabi”工具链(未指定任何ARM标志)构建我的应用程序,那么我的应用程序将使用软浮点ABI。正确吗?在这种情况下,我的所有依赖项也必须使用相同的ABI才能正确链接。正确吗?如果我的应用程序使用软浮点ABI,那么我的应用程序肯定链接到软浮点ABI共享标准库。当我在我的RaspberryPi上运行我的应用程序时,一切都按预期工作。如果Raspbian使

c++ - 如何在 clang(或 gcc)中删除 C++ 名称?

我正在尝试为clang编写一个快速而肮脏的demangler。我找到了pieceofcode它使用abi::__cxa_demangle,但我不知道它需要哪个header。显而易见的选择是ABI.h但是:demangle.cpp:2:10:fatalerror:'ABI.h'filenotfound#include^使用abi::__cxa_demangle需要什么? 最佳答案 包括cxxabi.h。在Ubuntu13中,此header位于/usr/include/c++/4.x中,其中x是次要gcc版本。

c++ - 从类返回指针。谁负责删除?

我有一个实现二进制兼容接口(interface)(用作共享库)的C++类,因此只返回C类型。作为constchar*的字符串、void指针和指向具有二进制兼容接口(interface)的其他类的指针。问题是我应该如何组织内存管理,我应该返回指向现有类数据的常量指针(用户使用过时指针的危险),然后自己释放内存,或者指向一些堆变量的指针并让用户负责删除这些指针后来,还是???是否有一些通用准则? 最佳答案 在“二进制兼容接口(interface)”中,使用C接口(interface),您不假设共享堆。因此,从堆中分配内存的一方是将其返回

c++ - 关于C/C++静态库的推理

我从来没有想过下面的问题,但由于我现在不得不处理我的代码中的一堆依赖关系,我想我最好弄清楚我的事实。让我们将其限制为现代Linux版本,例如ubuntuamd64。由于静态库不包含动态库引用,undefinedsymbol如何在静态库中解决?依赖二进制文件是否可以动态加载undefinedsymbol,或者这些符号必须在编译时由另一个静态库或目标文件解析?编译器是否可以通过链接动态库来解析(依赖于静态库的应用程序的)依赖关系,如果是这样,代码文本是否会静态解析为生成的二进制文件,或者是否存在动态引用?例如,静态库L使用libc6.so中的malloc,它将被应用程序A使用>。L和A都会

c++ - C++ ABI 是否指定 vTable 和 RTTI 信息应该如何存在?

像GCC/VC这样的流行实现使用多态对象的第一个size_t空间作为指针,指向一个vtable结构。这是最新的C++ABI的一部分吗?RTTI的实现如何,C++ABI有没有规定如何实现?谢谢 最佳答案 不,C++标准没有指定这些应该如何实现。没有单一的C++ABI。 关于c++-C++ABI是否指定vTable和RTTI信息应该如何存在?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - MIPS 和 x86_64 之间对象对齐的差异

我有一个二进制对象,它是使用MIPSpro编译器在SGI64位机器上生成的。我试图在运行RHEL6.7的64位x86_64机器上读取这个二进制对象。对象的结构是这样的classA{public:A(){a_=1;}A(inta){a_=a;}virtual~A();protected:inta_;};classB:publicA{public://Constructors,methods,etcB(doubleb,inta){b_=b;a_=a;}virtual~B();private:doubleb_;};A::~A(){}B::~B(){}读取二进制文件后,a交换字节(由于字节顺序

c++ - GCC 手册中提到的 "C++ ABI Specification"是什么?

我在查看C++的GCC手册时,发现了以下引述:Version0referstotheversionconformingmostcloselytotheC++ABIspecification.Therefore,theABIobtainedusingversion0willchangeindifferentversionsofG++asABIbugsarefixed.(source)可以看出,上述段落引用了某种看似标准的C++ABI。然而,据我了解,不存在这样的ABI。这段话在说什么?一个好的答案将给出尽可能详尽的解释。将“C++ABI规范”放入我首选的搜索引擎中没有任何用处。