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