_set_invalid_parameter_handler
, _set_thread_local_invalid_parameter_handler
CRT geçersiz bir bağımsız değişken algıladığında çağrılacak bir işlev ayarlar.
Sözdizimi
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Parametreler
pNew
Yeni geçersiz parametre işleyicisinin işlev işaretçisi.
Dönüş değeri
Çağrıdan önce geçersiz parametre işleyicisinin işaretçisi.
Açıklamalar
Birçok C çalışma zamanı işlevi, kendilerine geçirilen bağımsız değişkenlerin geçerliliğini denetler. Geçersiz bir bağımsız değişken geçirilirse işlev hata numarasını ayarlayabilir errno
veya bir hata kodu döndürebilir. Bu gibi durumlarda geçersiz parametre işleyicisi de çağrılır. C çalışma zamanı, programı sonlandıran ve çalışma zamanı hata iletisi görüntüleyen varsayılan bir genel geçersiz parametre işleyicisi sağlar. kendi işlevinizi genel geçersiz parametre işleyicisi olarak ayarlamak için kullanabilirsiniz _set_invalid_parameter_handler
. C çalışma zamanı, iş parçacığı yerel geçersiz parametre işleyicisini de destekler. İş parçacığı yerel parametre işleyicisi kullanılarak _set_thread_local_invalid_parameter_handler
bir iş parçacığında ayarlanırsa, iş parçacığından çağrılan C çalışma zamanı işlevleri genel işleyici yerine bu işleyiciyi kullanır. Aynı anda genel geçersiz bağımsız değişken işleyicisi olarak yalnızca bir işlev belirtilebilir. İş parçacığı başına iş parçacığı yerel geçersiz bağımsız değişken işleyicisi olarak yalnızca bir işlev belirtilebilir, ancak farklı iş parçacıklarının farklı iş parçacığı yerel işleyicileri olabilir. İş parçacığı yerel işleyicileri, diğer iş parçacıklarının davranışını etkilemeden kodunuzun bir bölümünde kullanılan işleyiciyi değiştirmenize olanak sağlar.
Çalışma zamanı geçersiz parametre işlevini çağırdığında, genellikle kurtarılamaz bir hata oluştuğu anlamına gelir. Sağladığınız geçersiz parametre işleyici işlevi, kaydedebileceği tüm verileri kaydetmeli ve sonra durdurmalıdır. Hatanın kurtarılabilir olduğundan emin olmadığınız sürece denetimi ana işleve döndürmemelidir.
Geçersiz parametre işleyici işlevi aşağıdaki prototipe sahip olmalıdır:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
expression
Bağımsız değişken, hatayı tetikleyen bağımsız değişken ifadesinin geniş bir dize gösterimidir. function
Bağımsız değişken, geçersiz bağımsız değişkeni alan CRT işlevinin adıdır. file
bağımsız değişkeni, işlevi içeren CRT kaynak dosyasının adıdır. Bağımsız line
değişken, bu dosyadaki satır numarasıdır. Son bağımsız değişken ayrılmıştır. CRT kitaplığının hata ayıklama sürümü kullanılmadığı sürece parametrelerin tümü bu değere NULL
sahiptir.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_set_invalid_parameter_handler , _set_thread_local_invalid_parameter_handler |
C: <stdlib.h> C++: <cstdlib> veya <stdlib.h> |
ve _set_thread_local_invalid_parameter_handler
işlevleri Microsoft'a _set_invalid_parameter_handler
özeldir. Uyumluluk bilgileri için bkz . Uyumluluk.
Örnek
Aşağıdaki örnekte, geçersiz parametreyi alan işlevi ve CRT kaynaklarında dosya ve satırı yazdırmak için geçersiz parametre hata işleyicisi kullanılmıştır. CRT kitaplığında hata ayıklama kullanıldığında, geçersiz parametre hataları da kullanılarak bu örnekte _CrtSetReportMode
devre dışı bırakılan bir onay oluşturur.
// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h> // For _CrtSetReportMode
void myInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
wprintf(L"Invalid parameter detected in function %s."
L" File: %s Line: %d\n", function, file, line);
wprintf(L"Expression: %s\n", expression);
abort();
}
int main( )
{
char* formatString;
_invalid_parameter_handler oldHandler, newHandler;
newHandler = myInvalidParameterHandler;
oldHandler = _set_invalid_parameter_handler(newHandler);
// Disable the message box for assertions.
_CrtSetReportMode(_CRT_ASSERT, 0);
// Call printf_s with invalid parameters.
formatString = NULL;
printf(formatString);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr
Ayrıca bkz.
_get_invalid_parameter_handler
, _get_thread_local_invalid_parameter_handler
CRT işlevlerinin gelişmiş güvenlik sürümleri
errno
, _doserrno
, _sys_errlist
ve _sys_nerr