在Delphi中使用_set_invalid_parameter_handler

时间:2015-11-02 15:33:32

标签: delphi

有没有人知道如何在Delphi XE7或更高版本中使用_set_invalid_parameter_handler?见MSDN Article

哎呀,似乎我应该给出更多背景信息。我正在尝试加载一个包装基于Matlab的DLL的C DLL。这在我使用Delphi 2007之前有效,但现在使用XE7失败了。我在事件日志中收到这些消息:

Module Load: RunChecker.dll. No Debug Info. Base Address: $10000000. Process myapp.exe (12304)
Module Load: libRunChecker.dll. No Debug Info. Base Address: $02A30000. Process myapp.exe (12304)
Module Load: mclmcrrt7_17.dll. No Debug Info. Base Address: $02A40000. Process myapp.exe (12304)
Module Load: PSAPI.DLL. No Debug Info. Base Address: $75420000. Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Debug Output:
Invalid parameter passed to C runtime function.

Process myapp.exe (12304)
Thread Start: Thread ID: 7192. Process myapp.exe (12304)

我正在试图找出造成这些错误的原因,我的搜索导致了上述情况,但也许这是错误的?但我正试着深入了解失败的原因。任何想法/建议最受赞赏!

1 个答案:

答案 0 :(得分:1)

_set_invalid_parameter_handler是MSVC运行时的一部分。它不是你直接从Delphi代码调用的东西,因为你的Delphi代码没有链接到MSVC运行时。

如果您确实希望调用_set_invalid_parameter_handler,则应该从链接到MSVC运行时的代码执行此操作。在你的情况下,这将是你的C DLL。

所有这一切,几乎可以肯定,问题与CharPChar类型有关。在Delphi 2007中,它们分别是AnsiCharPAnsiChar的别名。在Delphi 2009及更高版本中,它们分别是WideCharPWideChar的别名。