Aracılığıyla paylaş


_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_handlerbir 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 _CrtSetReportModedevre 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_errlistve _sys_nerr