当从c ++ dll公开时,我无法避免C ++类及其成员函数的名称损坏。
在这方面我不能使用def文件机制吗?
答案 0 :(得分:4)
我不相信。使用名称修改,以便每个重载的函数具有链接器查看的不同名称。
你可以在C中重写它们并使用extern "C" {}
构造但是你失去了所有漂亮的继承,多态性等等。您还可以将C ++包装在C函数中,并仅公开C函数。
答案 1 :(得分:3)
我认为最好的方法是在C ++库周围提供C包装器。当我使用C ++进行编程时,这种情况在10年或更长时间内非常流行,但我不知道它是否已经完成了。
基本上,对于每个class C
,每个构造函数ctor
都要公开,以创建一个extern "C" CPtr cCtor(....)
方法,该方法返回一个不透明的指针CPtr
和每个函数{{1要曝光,您需要创建func
另一种方法是创建一个具有函数指针类型成员变量的extern "C" cFunc(CPtr,....)
,实现它们以调用类方法并让客户端完成所有艰苦工作。
答案 2 :(得分:2)
我能想到的唯一方法是将函数声明为extern“C”。链接器需要名称修改以区分例如通过参数列表重载函数(如果不是名称修改,链接器将无法使用它)。
答案 3 :(得分:0)
虚拟函数将是我认为的答案,你注意到COM,创建一个实例,它给你一个指向该类的接口的指针。我想声明的方法不是通过名称来解决的, 但是通过插槽索引。