运行时检查失败 #3 - 变量"ProfileTypePassed"正在使用而未初始化
Run-Time Check Failure #3 - The variable 'ProfileTypePassed' is being used without being initialized
我得到错误运行时检查失败#3-变量"ProfileTypePassed"在未初始化的情况下被使用。我的代码如下。其来自msdn的防火墙api。我成功地执行了它,但不知怎么的,这个程序出现了错误。
void Get_FirewallSettings_PerProfileType(NET_FW_PROFILE_TYPE2 ProfileTypePassed, INetFwPolicy2* pNetFwPolicy2);
HRESULT WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2);
void Class123 :: Get_FirewallSettings_PerProfileType(NET_FW_PROFILE_TYPE2 ProfileTypePassed, INetFwPolicy2* pNetFwPolicy2)
{
ProfileTypePassed;
WFCOMInitialize(&pNetFwPolicy2);
VARIANT_BOOL bIsEnabled = FALSE;
NET_FW_ACTION action;
HRESULT hrComInit = S_OK;
HRESULT hr = S_OK;
TiXmlElement* msg31 = new TiXmlElement( "Firwall" );
TiXmlElement childText0( "Type" );
TiXmlNode* childNode0;
CString sTemp;
hrComInit = CoInitializeEx(
0,
COINIT_APARTMENTTHREADED
);
// Ignore RPC_E_CHANGED_MODE; this just means that COM has already been
// initialized with a different mode. Since we don't care what the mode is,
// we'll just use the existing mode.
if (hrComInit != RPC_E_CHANGED_MODE)
{
if (FAILED(hrComInit))
{
printf("CoInitializeEx failed: 0x%08lxn", hrComInit);
goto Cleanup;
}
}
WFCOMInitialize(&pNetFwPolicy2);
if(SUCCEEDED(pNetFwPolicy2->get_FirewallEnabled(ProfileTypePassed, &bIsEnabled)))
{
sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "Firwall Status" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
// printf ("Firewall is %sn", );
}
if(SUCCEEDED(pNetFwPolicy2->get_BlockAllInboundTraffic(ProfileTypePassed, &bIsEnabled)))
{sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "Block all inbound traffic" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
}
if(SUCCEEDED(pNetFwPolicy2->get_NotificationsDisabled(ProfileTypePassed, &bIsEnabled)))
{
sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "Notifications ar" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
}
if(SUCCEEDED(pNetFwPolicy2->get_UnicastResponsesToMulticastBroadcastDisabled(ProfileTypePassed, &bIsEnabled)))
{
sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "UnicastResponsesToMulticastBroadcast is" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
}
if(SUCCEEDED(pNetFwPolicy2->get_DefaultInboundAction(ProfileTypePassed, &action)))
{
sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "Default inbound action is" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
}
if(SUCCEEDED(pNetFwPolicy2->get_DefaultOutboundAction(ProfileTypePassed, &action)))
{
sTemp =bIsEnabled ? "enabled" : "disabled";
childText0.value = "Default outbound action is" ;
childText0.LinkEndChild(new TiXmlText(GetCharArray(sTemp)));
childNode0 = msg31->InsertEndChild( childText0 );
childText0.Clear();
}
net ->LinkEndChild (msg31);
Cleanup:
// Release INetFwPolicy2
if (pNetFwPolicy2 != NULL)
{
pNetFwPolicy2->Release();
}
// Uninitialize COM.
if (SUCCEEDED(hrComInit))
{
CoUninitialize();
}
}
// Instantiate INetFwPolicy2
HRESULT Class123 :: WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2)
{
HRESULT hr = S_OK;
hr = CoCreateInstance(
__uuidof(NetFwPolicy2),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(INetFwPolicy2),
(void**)ppNetFwPolicy2);
if (FAILED(hr))
{
printf("CoCreateInstance for INetFwPolicy2 failed: 0x%08lxn", hr);
goto Cleanup;
}
Cleanup:
return hr;
}
void Class123::OnBnClickedBtnWritexml()
{
Class123 obj_XML;
obj_XML.InitilizeXMLFile();
NET_FW_PROFILE_TYPE2 ProfileTypePassed;
INetFwPolicy2 *pNetFwPolicy2 = NULL;
obj_XML.WFCOMInitialize(&pNetFwPolicy2);
obj_XML.Get_FirewallSettings_PerProfileType((ProfileTypePassed),(pNetFwPolicy2));
obj_XML.SaveXMLFile();
AfxMessageBox(_T("Success"));
}
在Class123::OnBnClickedBtnWritexml
中,简而言之:
NET_FW_PROFILE_TYPE2 ProfileTypePassed; // (1)
obj_XML.Get_FirewallSettings_PerProfileType((ProfileTypePassed),(pNetFwPolicy2)); // (2)
在(1)中,定义了ProfileTypePassed
,但未对其进行初始化。在(2)中,它在没有首先初始化的情况下被使用。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 在函数内部的声明中初始化数组,并在外部使用它
- 继承:构造函数,初始化C++11中基类的类C数组成员