[英]C Wrapper for C++
我想將Pure Data用作我自己庫的原型工具。 我發現Pure Data補丁是用C語言編寫的,但我的庫是用C ++編寫的。 那么如何在純數據中使用此代碼呢? 由於我沒有使用普通的C,我想知道如何編寫C ++類的C包裝器以及如何實例化我的類呢? 或者我必須重寫C中的所有內容?
您需要為每個需要調用的函數編寫包裝函數。 例如:
// The C++ implementation
class SomeObj { void func(int); };
extern "C" {
SomeObj* newSomeObj() {return new SomeObj();}
void freeSomeObj(SomeObj* obj) {delete obj;}
void SomeObj_func(SomeObj* obj, int param) {obj->func(param)}
}
// The C interface
typedef struct SomeObjHandle SomeObj;
SomeObj* newSomeObj();
void freeSomeObj(SomeObj* obj);
void SomeObj_func(SomeObj* obj, int param);
請注意,這必須是C ++代碼。 extern "C"
指定該函數使用C命名約定。
讓我換一種說法:
1)您可以從C ++源調用C函數,數據和庫,然后從C調用C ++源代碼。
2)然而,每當C調用C ++源代碼時,該源必須寫在C ++的C子集中。
3)部分內容使用“extern C”。
4)另一部分是使用“#ifdef __cplusplus”
5)我上面引用的鏈接給出了很多細節
6)我查看了Pure Data站點 。 您可能需要對庫進行一些“調整”。 您可能希望創建一個新標題。 但從根本上說,我認為你可以實現讓你的庫與Pure Data集成的目標。
恕我直言...
您還可以使用flext框架使用C ++為Pure Data編寫對象。
你絕對可以用C ++調用C語言 - 沒問題!
最糟糕的情況是,您可能必須明確聲明從Pure Data調用的那些函數為“extern C”。 但幾乎可以肯定純數據已經為你做了(你可能會在Pure Data頭文件中看到“extern C”)。
這里有更多信息:
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
'希望有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.