有没有人知道如何在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)
我正在试图找出造成这些错误的原因,我的搜索导致了上述情况,但也许这是错误的?但我正试着深入了解失败的原因。任何想法/建议最受赞赏!
答案 0 :(得分:1)
_set_invalid_parameter_handler
是MSVC运行时的一部分。它不是你直接从Delphi代码调用的东西,因为你的Delphi代码没有链接到MSVC运行时。
如果您确实希望调用_set_invalid_parameter_handler
,则应该从链接到MSVC运行时的代码执行此操作。在你的情况下,这将是你的C DLL。
所有这一切,几乎可以肯定,问题与Char
和PChar
类型有关。在Delphi 2007中,它们分别是AnsiChar
和PAnsiChar
的别名。在Delphi 2009及更高版本中,它们分别是WideChar
和PWideChar
的别名。