簡體   English   中英

用於C ++的C包裝器

[英]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.

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