IKqProjection * CNewProjectedSystem::CreateProjection(void)
{
IKqProjectionPtr spKqProjection;
IKqProjectionParameterPtr spKqProjectionParameter;
HRESULT hr;
hr=spKqProjection.CreateInstance(__uuidof(KqProjection));
ASSERT(SUCCEEDED(hr));
CComboBox *pCombo=static_cast<CComboBox*>(GetDlgItem(IDC_PROJECT_PROJECTION_NAME));
ASSERT(pCombo!=NULL);
CString strKqProjectionName;
//获取椭球的名称
pCombo->GetWindowText(strKqProjectionName); hr=spKqProjection->Init(strKqProjectionName.AllocSysString());
//添加所有的投影参数
int nItems=0;
CString strParamName,strParamValue;//投影参数名称与投影参数值
double value;
CListCtrl *pListParams=static_cast<CListCtrl*>(GetDlgItem(IDC_PROJ_PARAM));
ASSERT(pListParams!=NULL);
nItems=pListParams->GetItemCount();
//遍历每一个参数,并添加到投影中去
for (int i=0;i<nItems;i++)
{
strParamName=pListParams->GetItemText(i,0);
strParamValue=pListParams->GetItemText(i,1);
#ifdef _UNICODE
value=_wtof(strParamValue.GetBuffer());
#else
value=atof(strParamValue.GetBuffer());
#endif
spKqProjectionParameter=NULL;
hr=spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter));
ASSERT(SUCCEEDED(hr));
hr=spKqProjectionParameter->Init(strParamName.AllocSysString(),value);
ASSERT(SUCCEEDED(hr));
hr=spKqProjection->AddParam(spKqProjectionParameter);
ASSERT(SUCCEEDED(hr));
}
return spKqProjection.Detach();
}请注意代码中的那个循环:
在每一次循环中的都会创建一个IKqProjectionParameter接口的组件,并且把它们加到IKqProjection中去,但是程序在执行的时候出了个问题:
第一次循环的时候spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter));,创建了一个IKqProjectionParameter对象,在调试时发现它的值为:0x01b3a940,这个是没有问题的,问题出在第二次循环中,当再次调用spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter))的时候却发现了一个奇怪的问题,这句执行完后,spKqProjectionParameter的值还是0x01b3a940,怎么跟第一次是一样的,于是程序导致了后面的AddParam()函数失败!
请问是什么原因造成的?
{
IKqProjectionPtr spKqProjection;
IKqProjectionParameterPtr spKqProjectionParameter;
HRESULT hr;
hr=spKqProjection.CreateInstance(__uuidof(KqProjection));
ASSERT(SUCCEEDED(hr));
CComboBox *pCombo=static_cast<CComboBox*>(GetDlgItem(IDC_PROJECT_PROJECTION_NAME));
ASSERT(pCombo!=NULL);
CString strKqProjectionName;
//获取椭球的名称
pCombo->GetWindowText(strKqProjectionName); hr=spKqProjection->Init(strKqProjectionName.AllocSysString());
//添加所有的投影参数
int nItems=0;
CString strParamName,strParamValue;//投影参数名称与投影参数值
double value;
CListCtrl *pListParams=static_cast<CListCtrl*>(GetDlgItem(IDC_PROJ_PARAM));
ASSERT(pListParams!=NULL);
nItems=pListParams->GetItemCount();
//遍历每一个参数,并添加到投影中去
for (int i=0;i<nItems;i++)
{
strParamName=pListParams->GetItemText(i,0);
strParamValue=pListParams->GetItemText(i,1);
#ifdef _UNICODE
value=_wtof(strParamValue.GetBuffer());
#else
value=atof(strParamValue.GetBuffer());
#endif
spKqProjectionParameter=NULL;
hr=spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter));
ASSERT(SUCCEEDED(hr));
hr=spKqProjectionParameter->Init(strParamName.AllocSysString(),value);
ASSERT(SUCCEEDED(hr));
hr=spKqProjection->AddParam(spKqProjectionParameter);
ASSERT(SUCCEEDED(hr));
}
return spKqProjection.Detach();
}请注意代码中的那个循环:
在每一次循环中的都会创建一个IKqProjectionParameter接口的组件,并且把它们加到IKqProjection中去,但是程序在执行的时候出了个问题:
第一次循环的时候spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter));,创建了一个IKqProjectionParameter对象,在调试时发现它的值为:0x01b3a940,这个是没有问题的,问题出在第二次循环中,当再次调用spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter))的时候却发现了一个奇怪的问题,这句执行完后,spKqProjectionParameter的值还是0x01b3a940,怎么跟第一次是一样的,于是程序导致了后面的AddParam()函数失败!
请问是什么原因造成的?
解决方案 »
- ON_WM_MOUSEWHEEL应该是垂直滚动条响应啊,怎么水平滚动条动呢
- 大家帮我看看这段arp伪装的简单代码出错在哪?
- 如何在listctrl列表中加一列checkbox(分数不多了请大家帮忙 急急急)
- 如何选中MFCGridCtrl中的某一行
- 还是数组的问题
- 动态生成类的数组的调用问题
- 哪儿有getnameinfo函数哟?《windows网络编程》里的例子出现了,但是编译不过。
- 关于CString的文字累加的问题
- 如何总保持我的窗口为活动状态
- 小弟编的程序(有问题),可是不知道问题在哪。(求助)
- 为什么使用CPropertySheet的继承类CMySheet创建属性页老是出错
- 怎么在64位环境下使用MFC控件?
for (int i=0;i<nItems;i++)
{
IKqProjectionParameterPtr spKqProjectionParameter;strParamName=pListParams->GetItemText(i,0);
strParamValue=pListParams->GetItemText(i,1);
#ifdef _UNICODE
value=_wtof(strParamValue.GetBuffer());
#else
value=atof(strParamValue.GetBuffer());
#endif
spKqProjectionParameter=NULL;
hr=spKqProjectionParameter.CreateInstance(__uuidof(KqProjectionParameter));
ASSERT(SUCCEEDED(hr));
hr=spKqProjectionParameter->Init(strParamName.AllocSysString(),value);
ASSERT(SUCCEEDED(hr));
hr=spKqProjection->AddParam(spKqProjectionParameter);
ASSERT(SUCCEEDED(hr));
}
return spKqProjection.Detach();
}