我想使用Pure Data作爲我自己的庫的原型工具。我發現Pure Data補丁是用C編寫的,但我的庫是用C++編寫的。那麼我怎樣才能在純數據中使用這段代碼呢?由於我沒有使用普通的C,我想知道如何爲C++類編寫一個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);
注THI s必須是C++代碼。 extern "C"
指定該函數使用C命名約定。
而不是使用'void *',你應該使用一個不完整的結構來獲得某種類型的安全。 –
爲了更好地理解,'extern'Linkage_Specification「{// code}'這種方式告訴編譯器在鏈接代碼時使用Linkage規範。 –
我不確定我完全理解你的例子。如果我在C++頭文件中聲明瞭這些外部「C」函數,爲什麼我必須在C中再次聲明它?我不能只在我的C文件中包含C++頭文件並直接調用函數嗎? – Pedro
你絕對可以從C++調用C--沒問題!
最糟糕的情況是,您可能必須將您從Pure Data調用的函數明確聲明爲「extern C」。但幾乎可以肯定的是純數據已經這樣做了你(你可能會看到「外部C」在純數據頭文件
下面是詳細信息:
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
「。希望幫助
讓我換一種說法:
1)您還可以從C++源C函數,數據和庫,你調用C從C
2 ++源)每當C調用到C++源但是,該源必須用C++的C子集編寫。
3)這部分是使用「extern C」。
4)另一部分是使用 「的#ifdef __cplusplus」
5)我上面引用的聯繫給予大量細節
6)我看着Pure Data site。您可能需要對圖書館進行一些「調整」。您可能希望創建一個新標題。但從根本上來說,我認爲你可以實現讓圖書館與Pure Data集成的目標。
恕我直言...
您也可以編寫使用C++使用flext framework純數據對象。
- 1. 包裝C#C++
- 2. SlickGrid C#包裝
- 3. C#包裝
- 4. 包裝malloc - C
- 5. 在Objective C中包裝Objective C C++/C++
- 6. Objective-C中包裝C++類
- 7. LAPACK包裝的C/C++
- 8. 包裝C#CLI類爲C#
- 9. 從C#與C++/CLI包裝
- 10. 在C#中包裝Visual C++#
- 11. C可變包裝
- 12. C包裝for pygments
- 13. C++ CLI包裝器
- 14. 包裝位到C++
- 15. C#包裝SQLite的
- 16. C#包裝原語
- 17. C#的包裝器
- 18. 通用包裝C++
- 19. C++包裝=操作
- 20. Swig - 包裝C struct
- 21. 原生C++ dll的C++/CLI包裝器
- 22. C#包裝類和dllimport從c + +
- 23. C++常量性爲C包裝
- 24. 如何在Objective-C中包裝C++庫?
- 25. SVNKit像C或C++的包裝器
- 26. 在C/C++中包裝Python對象
- 27. 從c頭自動創建C#包裝?
- 28. C++包裝C結構*和*和功能
- 29. 用Objective-C++包裝C++代碼
- 30. 包裝OpenCV C++與C#一起使用
稍微晚了一點,但我寫了一個關於C++的C封裝的小指令:http://www.teddy.ch/c++_library_in_c/ – Teddy