从Excel-DNA构build的Excel .XLL文件中解压内容

我不知道你是否知道excel-dna项目,这是一个帮助将.net程序集和语言集成到excel插件中的项目。

我的问题是,我想从一个xll文件(excel-dna能够打包xll内的资源)解压缩DLL。

我已经下载了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); } 

但它不起作用。 任何人有一个想法,从xll解压DLL?

提前致谢,

我想你正试图加载x86的.xll文件到一个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); } 

希望这可以帮助。

如果您想从Excel-DNA插件中提取.NET程序集,我写了一个名为ExcelDnaUnpack的小工具。 源代码位于GitHub上: https : //github.com/caioproiete/ExcelDnaUnpack

ExcelDnaUnpack是一个命令行工具,用于提取使用ExcelDnaPack打包的ExcelDna加载项的内容

 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 
Interesting Posts