Можно ли использовать COM-dll, построенную с помощью компилятора v90, в исполняемом файле, построенном с помощью компилятора v110?
DLL v90 используется исполняемым файлом во время выполнения через интерфейс COM (это не #import
ed).
Исполняемый файл строит против tlb dll. Оба ссылаются на MFC статически, и оба используют версию /MT
версии библиотеки времени выполнения.
Я понимаю, что это возможно, но не безопасно. Так как существуют полоски вокруг использования (то есть распределение памяти отличается, поэтому объекты не могут быть выделены в dll и удалены в исполняемом файле, так как это приведет к неожиданному поведению).
Пожалуйста, может кто-нибудь уточнить для меня?
Да, это безопасно. Если вы подчиняетесь правилам COM.
Правилами COM являются правила ABI 1, которые включают правила, относящиеся к управлению памятью, потокам и т.д.
Не пытайтесь подорвать эти правила, когда-либо.
Даже если один и тот же компилятор используется для dll и exe. Например, не выделяйте new
с одной стороны и delete
с другой - даже если вы используете один и тот же компилятор.
COM не ограничивает или не обеспечивает соблюдение определенного языка или платформы с обеих сторон - существует много технологий, языков и платформ, которые обеспечивают совместимость COM, например, COM-объект, реализованный в.NET, будет работать с exe C++, который импортирует объект, поэтому поскольку обе стороны подчиняются правилам.
1 Бинарный интерфейс приложения