Отладка зарегистрированной сборки.Net4 COM от вызывающей стороны Win32 в Visual Studio 2010
Это очень простая установка, я не могу поверить, но я не нашел никого с такой же проблемой...
Создайте библиотеку классов.Net4 в VS2010. Создайте максимально простой COM-объект:
[ComVisible(true)]
[Guid("CD157EBC-C89D-40b6-B531-E85FF4B3AE9A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAcorn
{
bool Foo(string moo);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("854B7690-C1C4-40c4-8059-B4F3450B30D0")]
public class Acorn : IAcorn
{
public Acorn()
{
}
public bool Foo(string moo)
{
return true;
}
}
Установите опцию "Зарегистрироваться для COM-взаимодействия" для сборки. Установите "цель платформы" на x86.
Создайте клиент Win32 с помощью Delphi, импортируйте объект, создайте его экземпляр с помощью обычного создания экземпляров (переводится в CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER или CLSCTX_LOCAL_SERVER, IUnknown, Result))
Запустите приложение Win32, все отлично работает.
Попробуйте отладить COM-объект из VS2010. Установите параметр Debug библиотеки классов для запуска внешней программы, укажите на исполняемый файл, который вы только что создали. Когда вы запускаете приложение Win32 из VS210, программа аварийно завершает работу (со Stackru) при попытке создать экземпляр COM.
Измените Target framework на.Net 3.5 Запустите отладку с VS2010, все работает, включая отладку.
Примечание. Это также является проблемой при использовании хостинга CLR или неуправляемого экспорта COM-экземпляров. Оба метода работают с.Net4, но отладка невозможна.
Вопрос стандартный - почему это происходит и есть ли обходной путь?
1 ответ
.NET Framework и Delphi могут устанавливать или ожидать разные значения в управляющем слове FPU.
Этой проблемы можно избежать, установив регистр явно перед вызовом кода.NET и сбросив его после выполнения кода.NET: