簡體   English   中英

是否可以將macfuse鏈接到C ++靜態庫?

[英]Is it possible to link macfuse to a C++ static library?

我已經在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

您可以提供包裝器,將C ++類公開為C-API:

Something.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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM