2013-08-23 2 views
1

Я успешно использовал MacFUSE на языке программирования C на OS X 10.6.8, и он отлично работает. В какой-то момент мне нужно начать вызов функций в статической библиотеке C++ (libSomething.a). От this question люди говорят, что единственный способ, которым это возможно, - изменить исходный код C++, чтобы сделать его вызываемым из C (то есть preend extern «C» перед именем функции и возвращаемым типом). К сожалению, у меня нет доступа к исходному коду, просто статическому файлу * .a библиотеки C++.Можно ли связать macfuse с статической библиотекой C++?

Есть ли способ преобразовать MacFUSE в программу C++ или Objective-C, чтобы разрешить вызывать функции C++ внутри статической библиотеки?

Я был бы признателен экспертам C/C++/Objective-C в сообществе, чтобы взвесить это.

Я использую Xcode 4.3

ответ

1

Вы можете предоставить оболочку, обнажив класс 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(); 
} 
Смежные вопросы