несколько дней назад я опубликовал вопрос для реализации стека трассировки Win32 API с MSYS / Mingw: Прогулка стека Win32 API с MinGW / MSYS?
Подсказка с явной загрузкойиз dll было правильное решение.Итак, я перезапустил попытку реализовать трассировку стека, используя механизм Win32 CaptureStackBackTrace API, касающийся этой подсказки.Загрузка dll работает нормально:
// Load the RTLCapture context function:
HINSTANCE kernel32 = LoadLibrary("Kernel32.dll");
if(kernel32 != NULL){
std::cout << "Try to load method from kernel32.dll: CaptureStackBackTrace" << std::endl;
typedef USHORT (*CaptureStackBackTraceType)(ULONG FramesToSkip, ULONG FramesToCapture, void* BackTrace, ULONG* BackTraceHash);
CaptureStackBackTraceType func = (CaptureStackBackTraceType) GetProcAddress( kernel32, "RtlCaptureStackBackTrace" );
if(func==NULL){
std::cout << "Handle for CaptureStackBackTrace could't loded! Stop demo!."<< std::endl;
FreeLibrary(kernel32);
kernel32 = NULL;
func = NULL;
exit(1);
}
void *array[63];
int i,num = 0;
std::cout << "Try to call CaptureStackBackTrace..."<< std::endl;
num = CaptureStackBackTraceType( 1, 32, array, NULL );}
Но у меня возникли проблемы, если я вызову метод CaptureStackBackTraceType и запустлю проблемы преобразования типов:
stacktrace.cpp: 138: ошибка: функциональное приведениесписок выражений рассматривается как составное e xpression stacktrace.cpp: 138: ошибка: недопустимое преобразование из USHORT (*)(ULONG, ULONG, voi
d*, ULONG*)' to
USHORT '
Я думаю, что эта проблема может быть связана с различиями типов между MSYS / MinGW и определениями dll.Явное определение USHORT #define USHORT unsigned short не имеет никакого эффекта.
Кто-нибудь знает, как я могу решить эту проблему?Буду глубоко признателен за любую подсказку.
С уважением, Кристиан