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