无法在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>>");  
     } 
    } 
} 

请帮

+1

您是否尝试过使用“添加参考”选项。 – 2010-12-09 23:10:15

+0

等一下,我才意识到。你的DLL是托管代码吗?如果是这样,那么vash47说,只需添加一个参考。不要做DLLImport!这通常是针对非托管dll的。 – SRM 2010-12-09 23:11:32

+0

@ Vash47你应该已经做了一个答案 - 另一个用户打你,你不能接受评论作为答案。 :) – SRM 2010-12-09 23:12:31

您的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(); 
     } 
    } 
}