如何从.NET DLL导入方法以从C#代码调用?我尝试了[DllImport...]
方法并使用Assembly进行反射。我对.NET非常缺乏经验,如果这是一个非常基本的问题,请道歉。我的目标是致电LZ4Decompressor32().Decompress(byte[])
。
Reflector将LZ4Decompressor32
显示为基类型ILZ4Decompressor
的派生类型。所有这些都在Exec
下,我猜是父命名空间?
屏幕截图:http://s0.uploads.im/KEqXk.jpg
我希望我只是弄乱命名空间或输入路径,但我已经尝试了我能想到的每一种组合。
仅供参考,这是我正在努力学习的旧CTF挑战。完整的挑战从其资源部分提取下一个阶段,然后在资源数据上调用LZ4Decompressor32().Decompress()
方法。
ResourceManager manager = new ResourceManager(Name, Assembly.GetExecutingAssembly());
byte[] compressed = (byte[]) manager.GetObject("data");
return new LZ4Decompressor32().Decompress(compressed);
编辑:有关详细信息,在调试和中断Assembly.LoadFrom(...)
时,我收到以下错误:
无法加载文件或程序集' file:/// [dll path]'或其中一个依赖项。该模块应包含一个程序集清单。
我通过Dependency Walker运行DLL,唯一的抱怨是MSJAVA.DLL,Dependency Walker解释(http://dependencywalker.com/faq.html)。
答案 0 :(得分:4)
请按照以下步骤操作。
在Visual Studio中打开主程序(您的Web项目或您的exe项目)的项目。
找到"解决方案资源管理器"窗格
右键点击"参考文献"节点并选择"添加参考"
点击"浏览"
选择您想要的DLL" import"然后单击“确定”
恭喜,您现在已经"导入" DLL中的所有非内部非私有类和方法。
只是实例化并使用。
答案 1 :(得分:0)
我通过从LZ4Sharp项目导入源来解决该标志。我的希望是学习一些关于反射和命名空间/类路径的东西,但我想我可以自己试验一下。感谢大家的建议;并感谢@Frank Boyne关于regsvr32和regasm的解释。