【发布时间】:2012-08-10 15:32:42
【问题描述】:
假设我的 DLL 中有以下函数:
void TestFunction(int type, void* data)
现在从加载该 DLL 的应用程序调用该函数。应用程序初始化一个结构并将指向该结构的指针发送给该函数:
SampleStruct strc;
TestFunction(DT_SS, &ss);
到目前为止一切顺利。现在困扰我的是如何用另一个结构替换内存中的strcc变量。如果我在我的 dll 中执行以下操作:
SampleStruct dllstrcc;
data = &dllstrcc;
data 现在将指向新的 dllstrcc 结构,但是当它存在函数并且控件返回到应用程序时 strc 仍将指向第一个结构。如何在不分配每个字段的情况下用我的 dll 结构替换应用程序的结构:
data.vara = dllstrcc.vara;
data.varb = dllstrcc.varb;
data.varc = dllstrcc.varc;
【问题讨论】:
-
首先让我注意,听起来你正在走向未定义的行为(通过放弃指向本地数据的指针)并指出应该避免像
void*这样的构造(不是双关语) 在 C++ 中(因为大多数情况下都是可能的)。那就是说:指针的引用/指针怎么样,可以让您替换调用者站点上的指针? -
@Nobody 实际上这不是一个空洞*,但可以说归结为它。至于指向指针的指针,我无法控制应用程序或 dll 函数。但是函数内部的代码在我的控制之下。
-
如果您被该界面所束缚,那么您无能为力。