C#从.NET DLL导入

时间:2015-07-23 23:50:43

标签: c# .net reflection dllimport

如何从.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)。

2 个答案:

答案 0 :(得分:4)

请按照以下步骤操作。

  1. 在Visual Studio中打开主程序(您的Web项目或您的exe项目)的项目。

  2. 找到"解决方案资源管理器"窗格

  3. 右键点击"参考文献"节点并选择"添加参考"

  4. 点击"浏览"

  5. 选择您想要的DLL" import"然后单击“确定”

  6. 恭喜,您现在已经"导入" DLL中的所有非内部非私有类和方法。

    只是实例化并使用。

答案 1 :(得分:0)

我通过从LZ4Sharp项目导入源来解决该标志。我的希望是学习一些关于反射和命名空间/类路径的东西,但我想我可以自己试验一下。感谢大家的建议;并感谢@Frank Boyne关于regsvr32和regasm的解释。