Отладка зарегистрированной сборки .Net4 COM от вызывающей стороны Win32 в Visual Studio 2010 - PullRequest
4 голосов
/ 24 мая 2011

Это очень простая установка, я не могу поверить, но я не нашел никого с такой же проблемой ...

Создать библиотеку классов .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» для сборки.Установите для "target target" значение x86.

Создайте клиент Win32 с помощью Delphi, импортируйте объект, создайте его экземпляр с помощью обычного создания экземпляров (переводится в CoCreateInstance (ClassID, nil, CLSCTX_INPROC_SERVER или CLSCTX_LOCAL_SERVER, IUnknown, Result))*

Запустите приложение Win32, все работает нормально.

Попробуйте отладить COM-объект из VS2010.Установите параметр Debug библиотеки классов для запуска внешней программы, укажите на исполняемый файл, который вы только что создали.При запуске приложения Win32 из VS210 происходит сбой программы (со StackOverflow) при попытке создать экземпляр COM.

Измените целевую платформу на .Net 3.5 Запустите отладку из VS2010, все работает, включая отладку.

Примечание. Эта проблема также возникает при использовании хостинга CLR или неуправляемого экспорта COM-экземпляра.Оба метода работают с .Net4, но отладка невозможна.

Вопрос стандартный - почему это происходит и есть ли обходной путь?

1 Ответ

2 голосов
/ 31 мая 2011

.NET Framework и Delphi могут устанавливать или ожидать разные значения в управляющем слове FPU.

Этой проблемы можно избежать, если явно задать регистр перед вызовом кода .NET и сбросить его после выполнения кода .NET:

Как установить и восстановить регистры FPU CTRL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...