最近我面临着指向VC6编译器的问题.
其中很少是:
以下示例未使用VC6编译器进行编译.它说"错误C2562:'()':'void'函数返回一个值".看起来VC6不喜欢将void函数传递给for_each.
class Temp
{
public:
Temp(int i):m_ii(i)
{}
int getI() const
{
return m_ii;
}
void printWithVoid()
{
cout<< "i = "<<m_ii<<endl;
}
bool printWithBool()
{
cout<< "i = "<<m_ii<<endl;
return true;
}
private:
int m_ii;
};
int main(void)
{
std::vector<Temp> arrTempObjects;
arrTempObjects.push_back(Temp(0));
arrTempObjects.push_back(Temp(2));
//Doesnot work, compiler error
std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithVoid));
//Works
std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithBool));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您是否遇到过与VC6.0相关的任何其他问题.解决这些问题的任何解决方法?还是时候改变编译器了?
_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;
//Assign some value to strTempName
strGroupName = _tcschr(strTempName, 92) //C2440
Run Code Online (Sandbox Code Playgroud)
在VS2008中编译此代码时,我在上面的行中收到错误.在VC6中它编译得很好.
错误C2440:'=':无法从'const wchar_t*'转换为'_TCHAR*'
什么似乎是问题,我该如何解决?
在编译一些复杂的模板时,我有时会得到:
致命错误 C1076:编译器限制:达到内部堆限制;使用 /Zm 指定更高的限制
我知道我可以去项目设置并指定例如/Zm500给编译器更多的内存(更多信息/Zm可以在这里找到)。然而,它非常麻烦,我更喜欢全局设置默认限制。有什么办法吗?
或者,是否有任何方法可以使用源文件的编译指示或其他注释来指定此特定标志?这样,它也可以在具有潜在不同设置的机器之间实现便携。
我使用的是 Visual Studio 2008,如果它也适用于 Visual C++ 6.0,我不会介意。
我已经看到处理器包可用于 Visual Studio 6,但它似乎只对使用 SP5 的用户可用,而且我已经在使用 SP6:
此外,Visual C++ 处理器包 (VCPP) 已从 Service Pack 6 中删除。如果您安装了 VCPP,安装 SP6 会将其从您的计算机中删除。如果您希望继续使用 VCPP,则需要继续使用 SP5 或迁移到 Visual Studio 2002 或 2003(推荐)。
首先,这个处理器包是否与 Visual Studio 6 SP6 兼容?
其次,它真的会帮助我吗?我担心从我的应用程序中获得最大收益,但它需要在所有类型的 Intel 和 AMD 芯片上运行,所以我不能只针对一个平台。
performance visual-c++-6 intel visual-studio-6 amd-processor
我是 win32 编程和驱动程序编程的新手。我已经在我的系统上安装了 Windows DDK,并且有一些使用 DDK 的示例,但这些示例没有 dsw 文件。
我想知道如何创建 .dsw 文件,以便可以在 VC6 中打开该工作区。
嗨,
有人可以帮助我理解为什么SQUARE(x)的值是49?
我使用的是Visual C++ 6.0.
#define SQUARE(X) X * X
int main(int argc, char* argv[])
{
int y = 5;
printf("%d\n",SQUARE(++y));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 肯定答案是"你不能"或"使用XP模式",但我想知道它是否可能.
我遇到的问题是每当我调试一些应用程序并遇到断点时,当我停止调试器时,调试对象仍然卡住.它不能被杀死,我不能附加另一个调试器(它说它已经被调试).在关闭Visual C++之前,它不会消失.
这是在Windows 7 64位安装上的开销.VC安装了SP 6.
是否可以将已定义的接口对象数组从C++ COM函数(VC6)返回到VB6客户端?我已经浏览过网络,但却未能找到描述我需要做什么的任何事情.我已经看到很多传递BSTR和VARIANT类型,但我需要一些方法来实际让客户端利用我在数组中返回的接口类型.
我假设我需要做什么
- 使用SAFEARRAY
- 使用带有VT_UNKNOWN类型的SAFEARRAY,这反过来意味着我需要将对象作为IUnknown对象放入数组中.
从这里开始,我很难过.是否有可能在VB6中解释IUnknown类型,并以某种方式将其转换为我需要的类型?或者我是以完全错误的方式解决这个问题的......
澄清:
放置在集合中的接口用于模拟结构.我基本上需要传回一个结构数组.
在 Windows 7(家庭高级版 64 位 SP1)上安装的 Visual Studio 6 中,我无法通过工具 > 选项查看或更改源窗口的字体...
工具 > 选项...,格式选项卡,类别:源窗口,产生字体:(空白)与空列表,大小(空白)与空列表。
似乎缺少相关的注册表配置单元:
[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format]
从现有安装导入此注册表配置单元确实会根据需要更改字体,但仍不显示它,也不让我通过 Tools > Options... 更改这些设置。
是否有适当的解决方案,以便格式选项可以正常工作?
我正在编写一个具有大量接口和方法的 COM 服务器。并且大多数方法都以 BSTR 作为参数和用于返回的本地参数。一个片段看起来像
更新 5:
真正的代码。这基于特定条件从 DB 的一堆数据中获取以填充对象数组。
STDMETHODIMP CApplication::GetAllAddressByName(BSTR bstrParamName, VARIANT *vAdddresses)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
//check the Database server connection
COleSafeArray saAddress;
HRESULT hr;
// Prepare the SQL Strings dan Query the DB
long lRecCount = table.GetRecordCount();
if (lRecCount > 0)
{
//create one dimension safe array for putting details
saAddress.CreateOneDim(VT_DISPATCH,lRecCount);
IAddress *pIAddress = NULL;
//retrieve details
for(long iRet = table.MoveFirst(),iCount=0; !iRet; iRet = table.MoveNext(),iCount++)
{
CComObject<CAddress> *pAddress;
hr = CComObject<CAddress>::CreateInstance(&pAddress);
if (SUCCEEDED(hr))
{
BSTR bstrStreet = ::SysAllocString(table.m_pRecordData->Street); …Run Code Online (Sandbox Code Playgroud)