MFC DLL:类对象值未在整个导出调用中持久化

MFC DLL:类对象值未在整个导出调用中持久化,dll,mfc,export,Dll,Mfc,Export,我写的MFC dll有3种方法可以导出。我已经将类对象声明为全局对象,并在第一个方法中初始化它,然后第二个和第三个方法使用并处理它。 问题是类object的值并没有在整个文件中持久化。当第二个或第三个方法从C#客户端应用程序获取调用时,类 对象值正在变为NULL 谁能告诉我为什么会发生这种事!我曾在另一个应用程序中尝试过同样的scnaerio,但此问题未被复制 代码: 接口文件: #include "StdAfx.h" #define DLLEXPORT __declspec(dllexport

我写的MFC dll有3种方法可以导出。我已经将类对象声明为全局对象,并在第一个方法中初始化它,然后第二个和第三个方法使用并处理它。 问题是类object的值并没有在整个文件中持久化。当第二个或第三个方法从C#客户端应用程序获取调用时,类 对象值正在变为NULL

谁能告诉我为什么会发生这种事!我曾在另一个应用程序中尝试过同样的scnaerio,但此问题未被复制

代码: 接口文件:

#include "StdAfx.h"
#define DLLEXPORT __declspec(dllexport)

using namespace nsAnalyzer;
static CWindowsAnalyzer *pWindowsAnalyzer = NULL;

extern "C" DLLEXPORT void Init( const wchar_t       *sCurrentUserDataDir,
                                const wchar_t       *sMachineName,
                                const wchar_t       *sMacId )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    try
    {
        nsAnalyzer::CWindowsAnalyzer *pWindowsAnalyzer = new CWindowsAnalyzer(  CString(sCurrentUserDataDir),
                                                                                CString(sMachineName),
                                                                                CString(sMacId) );

        if(pWindowsAnalyzer)
        {
            pWindowsAnalyzer->Init();
        }
    }
    catch(const std::exception& e)
    {
        cout<<"Error: Exception occured in Init: "<<e.what()<<endl;
    }
}

extern "C" DLLEXPORT bool Analyze()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    bool bResult = false;

    try
    {
        if(pWindowsAnalyzer->ConsolidateRawActivities())
        {
            cout<<"ConsolidateRawActivities succeed"<<endl;
            bResult = true;
        }
        else
        {
            cout<<"ConsolidateRawActivities failed"<<endl;
            bResult = false;
        }
    }
    catch(const std::exception& e)
    {
        cout<<"Error: Exception occured in Analyze: "<<e.what()<<endl;
    }

    return bResult;
}

extern "C" DLLEXPORT void Dispose()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    try
    {
        // Disponse windows analyzer
        if(pWindowsAnalyzer)
        {
            delete pWindowsAnalyzer;
        }

        // Dispose Logger
        CLogger::DisposeInstance();
    }
    catch(const std::exception& e)
    {
        cout<<"Error: Exception occured in Dispose: "<<e.what()<<endl;
    }
}
#包括“StdAfx.h”
#定义DLLEXPORT\uuu declspec(DLLEXPORT)
使用名称空间分析程序;
静态CWindowsAnalyzer*pWindowsAnalyzer=NULL;
外部“C”DLLEXPORT void Init(常量wchar\u t*sCurrentUserDataDir,
const wchar_t*名称,
const wchar_t*sMacId)
{
AFX_管理_状态(AFXGetStaticModuleEstate());
尝试
{
nsAnalyzer::CWindowsAnalyzer*pWindowsAnalyzer=新的CWindowsAnalyzer(CString(sCurrentUserDataDir),
CString(名称),
CString(sMacId));
if(pWindowsAnalyzer)
{
pWindowsAnalyzer->Init();
}
}
捕获(const std::exception&e)
{

您是否将
pWindowsAnalyzer
声明为static,这是正确的,但随后在
Init()中声明了另一个本地范围的实例
函数。我建议从try块中删除
nsAnalyzer::CWindowsAnalyzer*
,这样您就可以引用静态实例了。@user1793036:非常感谢user1793036!!您是对的,我错了,我在Init()中创建了另一个本地对象。再次感谢!!非常欢迎您。