无法在DLL中看到方法...为什么?
问题描述:
无法在DLL中看到方法...为什么?无法在DLL中看到方法...为什么?
我开发C#中的DLL
当我尝试调用它,我得到:
System.EntryPointNotFoundException:无法找到名为切入点:
这意味着,DLL多恩斯t导出从DLL中可见的任何方法。 DUMPBIN不显示任何方法之一:
DUMPBIN.EXE -exports ActiveXTest.dll 转储文件的ActiveXTest.dll 文件类型:DLL 摘要 2000 .reloc节 2000 .rsrc 2000 .text区段
怎么回事?
的DLL看起来不错..根据文档:
namespace Kosmala.Michal.ActiveXTest
public static void setHooks()
{
....
}
这是我如何称呼它:
namespace IWFHotkeyStarter
{
class Program
{
[DllImport("D:\\work\\iwf\\_ctrl-tab-modless_dlg_testing\\activex\\VSProjects\\AcriveXSourceCode\\bin\\Debug\\ActiveXTest.dll")]
public extern static void setHooks();
static void Main(string[] args)
{
Program p = new Program();
p.run();
}
private void run(){
Console.WriteLine("run<<");
setHooks();
Console.WriteLine("run>>");
}
}
}
请帮
答
您的DLL托管代码(C#编写)。像ActiveX控件容器这样的经典DLL是非托管代码,并以另一种方式组织。
要在托管项目中使用受管DLL,请添加对其的引用或在运行时加载它。
答
正如马里奥所述,.Net程序集以不同方式公开库和类,因此像DumpBin这样的工具不会显示任何东西 - 如果您想要查看程序集内部,请尝试使用Reflector。
至于如何调用您的托管程序集,您显示的方法(DllImport)用于interops /调用非托管代码。要调用另一个托管程序集中的方法,您只需添加程序集引用,并且应该能够看到方法。
另外一点需要注意的是,在C#中的所有方法必须属于一类,所以你的例子看起来可能更像这样:
namespace Kosmala.Michal.ActiveXTest
public class Hooks
{
public static void setHooks()
{
}
}
使用方法:
using namespace Kosmala.Michal.ActiveXTest;
namespace IWFHotkeyStarter
{
class Program
{
// ...
private void run()
{
Hooks.setHooks();
}
}
}
您是否尝试过使用“添加参考”选项。 – 2010-12-09 23:10:15
等一下,我才意识到。你的DLL是托管代码吗?如果是这样,那么vash47说,只需添加一个参考。不要做DLLImport!这通常是针对非托管dll的。 – SRM 2010-12-09 23:11:32
@ Vash47你应该已经做了一个答案 - 另一个用户打你,你不能接受评论作为答案。 :) – SRM 2010-12-09 23:12:31