变量在DLL调用之间保存内存中的值 我有一个C++编写的DLL,在Windows模拟中多次调用Windows应用程序。当我执行模拟时,DLL在开始时加载到内存中一次,直到模拟结束才卸载。在模拟过程中,DLL中的函数会被多次调用。我希望DLL函数的输出在每次连续调用时都被重用为同一函数的输入,以便计算运行总数。我的想法是,我只需要在函数外部定义一个全局变量,然后每次调用函数时我都可以引用它并将其添加到函数中,但似乎全局变量没有保存更新的值。相反,每次调用DLL时,它似乎都重置为0

变量在DLL调用之间保存内存中的值 我有一个C++编写的DLL,在Windows模拟中多次调用Windows应用程序。当我执行模拟时,DLL在开始时加载到内存中一次,直到模拟结束才卸载。在模拟过程中,DLL中的函数会被多次调用。我希望DLL函数的输出在每次连续调用时都被重用为同一函数的输入,以便计算运行总数。我的想法是,我只需要在函数外部定义一个全局变量,然后每次调用函数时我都可以引用它并将其添加到函数中,但似乎全局变量没有保存更新的值。相反,每次调用DLL时,它似乎都重置为0,c++,dll,C++,Dll,这是我的DLL函数调用,除了全局变量外,它工作正常: double Revenue = 0; //global variable extern "C" void __declspec(dllexport) CashFlow(int methodID, int* status, double* inargs, double* outargs) { Bank MyBank1(methodID, inargs, outargs, Revenue); *status = MyBan

这是我的DLL函数调用,除了全局变量外,它工作正常:

double Revenue = 0;   //global variable

extern "C" void __declspec(dllexport) CashFlow(int methodID, int* status, double* inargs, double* outargs)
{
    Bank MyBank1(methodID, inargs, outargs, Revenue);
    *status = MyBank1.UpdateAmounts();

    Revenue = MyBank1.getRevenue();
}
您能告诉我我可能做错了什么,或者如何定义一个全局变量来存储DLL中的持久数据吗


谢谢大家!

全局变量应该完全按照您期望的方式工作。有些事情超出了您的描述。Crystal ball说您有两个名为Revenue的全局变量,一个在DLL中,另一个在您自己的模块中,因为您在.h文件中声明了它。假设这是一个必须添加GetRevenue()函数的变通方法,这是一个比较典型的错误。事实并非如此。全球状态是一种坏习惯。回避在函数中添加参数和返回类型,让用户调用
revenue=CashFlow(…,…,revenue)