有一个现有的 API 函数只允许插件(DLL)接收三个参数并执行一些操作:
int ProcessMe(int nCommand, unsigned int wParam, long lParam);
现在,从主程序(exe),想传递两个变量给插件,并要求插件修改它们的内容,主程序将再次读取它们,以执行一些任务。
我的问题是,根据上面的函数,我可以在不改变函数参数的情况下执行这个吗?
例子:
int ProcessMe(int nCommand, unsigned int wParam, long lParam)
{
// modify the parameters//
return 0;
}
int main()
{
BOOL bSave = TRUE;
int nOption = 0;
ProcessMe(0, (unsigned int)(&bSave), (long)(&nOption));
if(FALSE==bSave)
printf("bSave is modified!");
return 1;
}
最佳答案
将要修改的变量放在一个结构中,并将指向该结构的指针传递给插件:
struct MyStruct
{
BOOL bSave;
int nOption;
};
int ProcessMe(int nCommand, unsigned int wParam, long lParam)
{
((MyStruct*)lParam)->nOption = ...;
return 0;
}
像这样使用它:
int main()
{
MyStruct struct;
struct.bSave = TRUE;
struct.nOption = 0;
ProcessMe(0, 0, (long)(&struct));
if(FALSE==struct.bSave)
printf("bSave is modified!");
return 1;
}
严格来说这是未定义的行为。您需要检查它是否适用于您的平台。
注意:我在这里使用了一个结构体,因为这样你还可以将更多变量或更大的变量(例如double)传递给函数。
关于c++ - 如何修改按值传递的原始变量的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9938096/