命名c ++类及其成员函数的错误?

时间:2009-02-23 07:11:08

标签: c++

当从c ++ dll公开时,我无法避免C ++类及其成员函数的名称损坏。

在这方面我不能使用def文件机制吗?

4 个答案:

答案 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,创建一个实例,它给你一个指向该类的接口的指针。我想声明的方法不是通过名称来解决的, 但是通过插槽索引。