2011-04-05 36 views
1

我想在C++中以交叉DLL安全的方式返回多個值。如何在C++中以DLL安全的方式返回多個值?

我應該使用stuct/class嗎?

+0

認爲你需要用DLL側面來解釋你的深層問題 - 特別是需要由DLL分配的內存由DLL被釋放 - 是正確的? – Elemental 2011-04-05 10:12:51

+0

@Elemental這似乎是一個常見的神話,但在一個DLL中刪除並在另一個DLL中刪除不會導致問題,如果鏈接正確完成。 – 2011-04-05 12:00:05

+0

實際上,如果構建了DLL,則會發生這種情況:在不同的編譯器上,具有自定義的新建構建於具有不同設置的相同編譯器上。我已經與這很多作鬥爭。 – Elemental 2011-04-06 11:19:55

回答

0

使用PIMPL成語:

在頭(DLL安全面):

class Type; 

class MyClass 
{ 
public: 
    int GetNumberOfType(); 
    Type * GetValue(int i) { return this->values[i]; }; 
protected: 
    Type ** values; 
}; 

在來源:

#include <Type.h> // common header to real definition and declaration 
2

雖然你的問題不是很清楚不過,這裏有幾個提示:

  1. 類/結構是用來分組的東西。儘管可以創建一個用於對所有返回值進行分組的結構,但它實際上取決於這些返回值的相關程度。這更符合慣例和麪向對象的原則。

  2. 要返回多個值,可以使用指針和引用。例如,以下函數原型以常規方式返回bool,但接受兩個指針作爲參數。這些指針指向的對象可以在被調用函數中更改,因此可以返回多個值。

函數原型:

bool returnValues(int i, char* c, int* result);