Ну, это вообще пушка.
Оставил в проекте CrashRpt только следующий код:
CrashRpt.cpp
#include "stdafx.h"
#include "CrashRpt.h"
void invalid_parameter_handler(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
)
{
std::ofstream f("E:\\output.txt", std::ios_base::app);
f << "Error" << std::endl;
}
CRASHRPTAPI(int) crInstallA(CR_INSTALL_INFOA* pInfo)
{
std::ofstream f("E:\\output.txt", std::ios_base::app);
f << "1" << std::endl;
_set_invalid_parameter_handler(invalid_parameter_handler);
f << "2" << std::endl;
return 0;
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID /*lpReserved*/)
{
return TRUE;
}
stdafx.cpp
#include "stdafx.h"
stdafx.h
#pragma once
#include <Windows.h>
CrashRpt.def
EXPORTS
crInstallA @8
В CrashRpt.h лежат объявления функций, структуры и макросы.
Пересобрал, слинковал с минимальным примером.
1 и 2 попадают в файл, "Error" -- нет.
Настройки проекта выставил дефолтными для чистого DLL-проекта, создаваемого в Visual Studio.