2015-11-02 5 views
1

Кто-нибудь знает, как использовать _set_invalid_parameter_handler с Delphi XE7 или новее? См. MSDN ArticleИспользование _set_invalid_parameter_handler в Delphi

Увы, похоже, я, вероятно, дал больше контекста. Я пытаюсь загрузить C DLL, которая обертывает Matlab-based 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

Эта функция относится к времени выполнения MSVC. Как ваша программа Delphi взаимодействует со средой MSVC? –

ответ

1

_set_invalid_parameter_handler является частью среды выполнения MSVC. Это не то, что вы вызываете непосредственно из кода Delphi, потому что ваш код Delphi не ссылается на среду выполнения MSVC.

Если вы хотите позвонить _set_invalid_parameter_handler, вы должны сделать это по коду, который ссылается на время выполнения MSVC. В вашем случае это будет ваша C DLL.

Все, что сказало, почти наверняка проблема связана с типами и PChar. В Delphi 2007 они являются псевдонимами AnsiChar и PAnsiChar соответственно. В Delphi 2009 и позднее они являются псевдонимами WideChar и PWideChar соответственно.

+0

Ах, да, вы почти наверняка правы - больше следовать ... Спасибо! – Bob

+0

Да, это были изменения Char/PChar! Ожидаемые старомодные строки C-стиля Matlab DLL - Спасибо, Дэвид! – Bob

Смежные вопросы