Загрузка EXE как DLL, локальный vftable

Решением, представленным @JRoppert, является почти то же как, что я делаю. Единственная разница - то, что я поместил следующие строки в локальный файл AssemblyInfo.cs, поскольку они могут меняться в зависимости от каждого блока:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

я также (обычно) использую одну общую информацию о блоке на решение, учитывая, что одним решением является единая линейка продуктов / публикуемый продукт. Общий информационный файл блока также имеет:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

, Который установит значение "ProductVersion", отображенное Windows Explorer.

7
задан Flimzy 12 June 2018 в 14:25
поделиться

2 ответа

Обходной путь, который я в итоге использовал, - это просто добавить конфигурацию компиляции и скомпилировать exe как настоящую dll вместо того, чтобы заставлять ее действовать как одна.

с использованием / fixed: нет по какой-то причине не решил проблему.

Еще одно различие между exes и DLL заключается в том, что точка входа отличается. Точкой входа DLL является DllMain, тогда как у exe есть точка входа в CRT, которая в конечном итоге вызывает main () или WinMain ().

4
ответ дан 7 December 2019 в 05:24
поделиться

VC ++ по умолчанию удаляет информацию о перемещении из файлов .exes, потому что обычно они не нуждаются в перемещении.

Вы можете заставить его сохранить информацию о перемещении с помощью / fixed: no. См .: http://msdn.microsoft.com/en-us/library/w368ysh2.aspx

4
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: