Работаю со Scilab, загружаю проект из примеров для NET в VS2012 (4.0, AnyCPU, OS W7 х64), запускаю консольное приложение — все работает.
Вообще пример представляет собой оболочку над бинарными dll Scilab'а, обращения к методам которых происходят через обычный PInvoke.
Как известно, по умолчанию консольные приложения грузятся в VS с установкой UseVSHostingProcess=true (Enable the Visual Studio hosting process).
При снятии этой галочки пример работать перестает.
Причем перестает при попытке передачи строкового параметра в метод — просто беззвучно вылетает с ошибкой 0xc0000409 (неправильный стек) даже под отладчиком.
Это, к счастью, лечится, если явно указать тип маршализации строки, например:
При раскомментаривании MarshalAs... начинает работать независимо от галочки "Visual Studio hosting process".
Вопросов, собственно, два:
1) Причем тут hosting process???
2) Есть ли другой способ нейтрализовать его влияние?
Спасибо...
Re: На что может влиять "Enable the Visual Studio hosting process"???
Здравствуйте, mDmitriy, Вы писали:
D>При раскомментаривании MarshalAs... начинает работать независимо от галочки "Visual Studio hosting process". D>Вопросов, собственно, два: D>1) Причем тут hosting process???
А причем тут если LPWStr если CharSet.Ansi?
D>2) Есть ли другой способ нейтрализовать его влияние?
Можно вместо String использовать IntPtr. Очевидно у вас бага в декларации — в одном случае повезло и не упало — в другом случае не повезло. Но, не факт что потом падать не начнет.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: На что может влиять "Enable the Visual Studio hosting process"???
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, mDmitriy, Вы писали:
D>>При раскомментаривании MarshalAs... начинает работать независимо от галочки "Visual Studio hosting process". D>>Вопросов, собственно, два: D>>1) Причем тут hosting process???
TK>А причем тут если LPWStr если CharSet.Ansi?
LPWStr потому что х64... Если билдить в х86, то срабатывает LPStr.
CharSet попробую поменять на Unicode.
И да, это не ответ на вопрос о влиянии hosting process.
D>>2) Есть ли другой способ нейтрализовать его влияние?
TK>Можно вместо String использовать IntPtr. Очевидно у вас бага в декларации — в одном случае повезло и не упало — в другом случае не повезло. Но, не факт что потом падать не начнет.
Вряд ли бага, ибо воспроизводимость стабильная для всех методов со строковыми параметрами...
Декларация из поставляемых примеров; впрочем, можно проверить по исходникам на С, они открыты и их есть.
Re[3]: На что может влиять "Enable the Visual Studio hosting process"???
Здравствуйте, mDmitriy, Вы писали:
D>...
TK>>А причем тут если LPWStr если CharSet.Ansi? D>LPWStr потому что х64... Если билдить в х86, то срабатывает LPStr. D>CharSet попробую поменять на Unicode. D>...
LPWStr и х64 как бы ортогонально
Re[3]: На что может влиять "Enable the Visual Studio hosting process"???
Здравствуйте, mDmitriy, Вы писали:
TK>>А причем тут если LPWStr если CharSet.Ansi? D>LPWStr потому что х64... Если билдить в х86, то срабатывает LPStr.
Разрядность и кодировка вещи ортогональные.
D>И да, это не ответ на вопрос о влиянии hosting process. D>>>2) Есть ли другой способ нейтрализовать его влияние? D>Вряд ли бага, ибо воспроизводимость стабильная для всех методов со строковыми параметрами...
Скорее всего проблема в "LPWStr потому что гладиолус"
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.