首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中使用C++损坏的函数

在C++中使用C++损坏的函数
EN

Stack Overflow用户
提问于 2012-09-11 21:55:09
回答 4查看 1.4K关注 0票数 5

我有一个.lib文件,我没有它的源代码。

我需要一个从中导出的函数,但我是用C语言编写的,这个函数是C++名称损坏的。我不会写extern "C",因为我没有源代码。

如何链接没有源码的损坏函数并切换到C++?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-11 21:58:12

创建C++包装器:

wrapper.cpp:

代码语言:javascript
复制
#include "3rdparty.hpp"

extern "C" int foo(int a, int b)
{
    return third_party::secret_function(a, b);
}

消费者.c:

代码语言:javascript
复制
extern int foo(int, int);

// ...

Build: (例如与GCC)

代码语言:javascript
复制
g++ -o wrapper.o wrapper.cpp
gcc -o consumer.o consumer.c
g++ -o program consumer.o wrapper.o -l3rdparty
票数 12
EN

Stack Overflow用户

发布于 2012-09-11 21:57:43

在这些函数上编写您自己的C++包装器,并用extern "C"声明您的包装器函数。

我不知道还有什么其他的方法。

票数 5
EN

Stack Overflow用户

发布于 2014-12-03 05:27:31

可以从c程序中调用.lib文件中损坏的名称。如果您链接到的.lib是稳定的,并且没有不断地重新编译/更新,那么这个解决方案可能对您有效。

我对.lib不是很熟悉,但How to See the Contents of Windows library (*.lib)或其他搜索应该会显示如何从windows获取此信息

在输出中搜索函数的名称,大多数mangling都会保持名称不变,只是用各种其他信息来修饰它。

将该名称放入您的C代码中,并添加解释性注释...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12371370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档