Распаковать содержимое из файла Excel .XLL, построенного с помощью Excel-DNA

Я не знаю, знаете ли вы проект excel-dna, это проект, который помогает интегрировать сборку .net и язык в дополнениях excel.

Моя проблема в том, что я хочу распаковать dll из xll-файла (excel-dna может упаковывать ресурсы внутри xll).

Я загрузил источники excel-dna и уже написал эту базу в исходном коде:

string xlllib = @"C:\pathtomyxllfile\myaddin.xll"; string xlloutput = @"C:\pathtomyxllfile\myaddin.dll"; var hModule = ResourceHelper.LoadLibrary(xlllib); var content = ResourceHelper.LoadResourceBytes(hModule, "ASSEMBLY_LZMA", "MYASSEMBLYNAME"); using (BinaryWriter binWriter = new BinaryWriter(File.Open(xlloutput, FileMode.Create))) { binWriter.Write(content); } 

но это не сработает. У кого-нибудь есть идея распаковать dll из xll?

заранее спасибо,

Я думаю, вы пытаетесь загрузить x86-файл x86 в x64-разрядный процесс. Невозможно комбинировать x86 и x64-бит. Вместо этого используйте функцию LoadLibraryEx для загрузки вашего .xll-файла в файл данных.

Вот небольшой пример кода:

 [Flags] enum LoadLibraryFlags : uint { DONT_RESOLVE_DLL_REFERENCES = 0x00000001, LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010, LOAD_LIBRARY_AS_DATAFILE = 0x00000002, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040, LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020, LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 } internal unsafe static class ResourceHelper { [DllImport("kernel32.dll")] public static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, LoadLibraryFlags dwFlags); // other methods such as LoadResourceBytes go here... } string xlllib = @"C:\pathtomyxllfile\myaddin.xll"; string xlloutput = @"C:\pathtomyxllfile\myaddin.dll"; var hModule = ResourceHelper.LoadLibraryEx(xlllib, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE | LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE); var content = ResourceHelper.LoadResourceBytes(hModule, "ASSEMBLY_LZMA", "YOUR_ASSEMBLY_NAME_WITHOUT_EXTENSION"); using (BinaryWriter binWriter = new BinaryWriter(File.Open(xlloutput, FileMode.Create))) { binWriter.Write(content); } 

Надеюсь это поможет.

Если вы хотите извлечь сборки .NET из надстройки Excel-DNA, я написал небольшую утилиту, называемую ExcelDnaUnpack . Исходный код находится на GitHub: https://github.com/caioproiete/ExcelDnaUnpack

ExcelDnaUnpack – утилита командной строки для извлечения содержимого надстроек ExcelDna, упакованных в ExcelDnaPack

 Usage: ExcelDnaUnpack.exe [<options>] Where [<options>] is any of: --xllFile=VALUE The XLL file to be unpacked; eg MyAddIn-packed.xll --outFolder=VALUE [Optional] The folder into which the extracted files will be written; defaults to '.\unpacked' --overwrite [Optional] Allow existing files of the same name to be overwritten Example: ExcelDnaUnpack.exe --xllFile=MyAddins\FirstAddin-packed.xll The extracted files will be saved to MyAddins\unpacked 
  • Можно просмотреть исходный код или декомпилировать XLL Excel добавить в
  • Как вы можете получить подпись функции, используемой в Excel в VBA или DLL?
  • Как распознать, что Excel действительно закрывается в надстройке XLL?
  • R / XLL: интерфейс для вызова метода XLL в R
  • Вызов Excel C API из надстройки VSTO
  • Установка формата номера Excel с помощью xlcFormatNumber в xll
  • Функция вызова в XLL-файле с C #
  • Отменить регистрацию XLL в Excel (VBA)
  • Разработка Excel XLL с использованием Mac OS X / Linux
  • Получите матрицу от excel в c ++ xll, изменив ее и вернув ее
  • Вызов других xll-файлов из кода C # / ExcelDNA
  • Давайте будем гением компьютера.