В соответствии с документацией для макросов преобразования OLE MSDN, если мы используем макрос в цикле for, например, он может выделить больше памяти в стеке, что приведет к переполнению стека.OLE macro in a for loop
Это пример, приведенный на MSDN
void BadIterateCode(LPCTSTR* lpszArray)
{
USES_CONVERSION;
for (int ii = 0; ii < 10000; ii++)
pI->SomeMethod(ii, T2COLE(lpszArray[ii]));
}
В приведенном выше примере T2COLE используется внутри для цикла, который может привести к переполнению стека, чтобы избежать этого вызов метода инкапсулируется в функцию как этот
void CallSomeMethod(int ii, LPCTSTR lpsz)
{
USES_CONVERSION;
pI->SomeMethod(ii, T2COLE(lpsz));
}
void MuchBetterIterateCode2(LPCTSTR* lpszArray)
{
for (int ii = 0; ii < 10000; ii++)
CallSomeMethod(ii, lpszArray[ii]);
}
Можем ли мы просто отправить LPCTSTR другой функции вместо герметизирующего весь метод, как это,
LPCOLESTR CallSomeMethod(LPCTSTR lpsz)
{
USES_CONVERSION;
return T2COLE(lpsz);
}
void BadIterateCode(LPCTSTR* lpszArray)
{
for (int ii = 0; ii < 10000; ii++)
pI->SomeMethod(ii, CallSomeMethod(lpszArray[ii]));
}
Может ли кто-нибудь сказать мне, безопасно ли использовать макрос OLE или все же мы можем столкнуться с переполнением стека?
Будут ли какие-либо другие проблемы с использованием вышеуказанного метода?