让我们来创建一个结构
struct MyDataStructure
{
int a;
int b;
string c;
};
让我们在通过dll公开的界面中添加一个函数。
class IDllInterface
{
public:
void getData(MyDataStructure&) = 0;
};
从加载dll的客户端exe来看,以下代码是否安全?
...
IDllInterface* dll = DllFactory::getInterface(); // Imagine this exists
MyDataStructure data;
dll->getData(data);
...
当然,假设客户端和dll都知道MyDataStructure。根据我的理解,由于代码分别针对dll和exe进行编译,因此不同编译器/编译器版本的MyDataStructure可能会有所不同。我的理解正确吗?
如果是这样,那么在使用不同的编译器/编译器版本时,如何安全地在dll边界之间传递数据呢?
MyDataStructure
包含一个std::string
对象,因此它与提出的重复问题完全相同。 - Cody Gray