На мгновение сравните исходный вызов метода:
GetObjectsForExportImpl(
long lExportOptions,
__int64 numIdProject,
XExportSets &exportSets,
long lClientId,
CComPtr<IEPIPDServer> ptrIPDServer,
FILE *fp
)
на ваш последующий рекурсивный вызов:
hr = pExportObject->GetObjectsForExportImpl(
lExportOptions,
numIdProject,
exportSets,
lClientId,
ptrIPDServer,
fp);
Если между ними не происходит волшебства, вы просто повторно вызываете метод с его собственным набором аргументов. Я подозреваю, что вы хотели поместить туда «exportLocal» вместо «exportSets», потому что в противном случае какой был смысл exportLocal.setShared.begin ()? Вы просто продолжите воссоздание нового exportLocal, сообщив ему о начале, повторении и т. Д.
Короче говоря, я думаю, что проблема в ошибке кодирования, а не в рекурсии.
В качестве дополнительного примечания - можете ли вы придумать способ сделать это циклом, а не рекурсией? Циклы почти всегда быстрее, проще, проще для понимания и быстрой отладки.