是否可以将macfuse链接到C ++静态库?

用户名

我已经在OS X 10.6.8上以C编程语言成功使用了MacFUSE,并且效果很好。在某个时候,我需要开始对C ++静态库(libSomething.a)进行函数调用。人们这个问题开始说,唯一可行的方法是修改c ++源代码以使其可从C调用(即在函数名称和返回类型之前加前缀“ C”)。不幸的是,我无权访问源代码,只有静态C ++库* .a文件。

有什么方法可以将MacFUSE转换为C ++或Objective-C程序,以允许在静态库中调用C ++函数?

我希望社区中的C / C ++ / Objective-C专家对此有所帮助。

我正在使用Xcode 4.3

Trojanfoe

您可以提供包装,将C ++类公开为C-API:

Someh.h:

class Something {
protected:
    int x;
public:
    Something() { x = 0; }
    void setX(int newX) { x = newX; }
    int getX() const { return x; }
};

wrapper.h:

#pragma once
typedef void *SOMETHING;

#ifdef __cplusplus
extern "C" {
#endif

SOMETHING createSomething();
void destroySomething(SOMETHING something);
void setSomethingX(SOMETHING something, int x);
int getSomethingX(SOMETHING something);

#ifdef __cplusplus
}    // extern "C"
#endif

wrapper.cpp:

#include <Something.h>
#include "wrapper.h"

SOMETHING createSomething() {
    return static_cast<SOMETHING>(new Something());
}

void destroySomething(SOMETHING something) {
    delete static_cast<Something *>(something);
}

void setSomethingX(SOMETHING something, int x) {
    static_cast<Something *>(something)->setX(x);
}

int getSomethingX(SOMETHING something) {
    return static_cast<Something *>(something)->getX();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章