在DLL中看不到方法......为什么?

时间:2010-12-09 23:05:55

标签: c# dll

无法在DLL中看到方法......为什么?

我在C#中开发了一个DLL

当我试图打电话时,我得到:

System.EntryPointNotFoundException:无法找到名为的参赛点:

这意味着DLL不会导出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>>");    
        }
    }
}

请帮忙

2 个答案:

答案 0 :(得分:4)

您的DLL是托管代码(用C#编写)。像ActiveX控件的容器这样的经典DLL是非托管代码,并以另一种方式组织。

要在托管项目中使用托管DLL,请添加对它的引用或在运行时加载它。

答案 1 :(得分:1)

正如Mario所说,.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();
        }
    }
}