簡體   English   中英

C++ 類及其成員函數的名稱重整?

[英]Name mangling of c++ classes and its member functions?

當從 C++ dll 公開時,我有沒有辦法避免 C++ 類及其成員函數的名稱修改。

我不能在這方面使用 def 文件機制嗎?

我不相信。 使用名稱修改,以便每個重載函數在鏈接器查看時具有不同的名稱。

你可以用 C 重寫它們並使用extern "C" {}構造,但是你會失去所有美麗的繼承、多態等等。 您還可以將 C++ 包裝在 C 函數中並僅公開 C 函數。

我認為最好的方法是在 C++ 庫周圍提供 C 包裝器。 10 年前,當我用 C++ 編程時,這非常流行,但我不知道它是否已經完成。

基本上,對於每個class C ,對於每個要公開的構造函數ctor以創建一個extern "C" CPtr cCtor(....)方法,該方法返回一個不透明的指針CPtr並且對於要公開的每個函數func你創建extern "C" cFunc(CPtr,....)

另一種方法是創建一個具有函數指針類型成員變量的CStruct ,實現它們以調用類方法,並讓客戶端完成所有繁重的工作。

我能想到的唯一方法是將函數聲明為 extern "C"。 鏈接器需要名稱修改來區分例如重載函數的參數列表(如果不是名稱修改,鏈接器將無法使用)。

虛擬函數將是我認為的答案,您是否注意到 COM,創建一個實例,它為您提供一個指向表示為類的接口的指針。 我猜聲明的方法不是按名稱解析的,而是按插槽索引解析的。

暫無
暫無

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

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