C# Can';在DLL中看不到方法。。。为什么?

C# Can';在DLL中看不到方法。。。为什么?,c#,dll,C#,Dll,在DLL中看不到方法。。。为什么? 我用C开发了一个DLL# 当我尝试调用它时,我得到: System.EntryPointNotFoundException:找不到名为的入口点: 这意味着DLL不会导出任何从DLL可见的方法。Dumpbin也不显示任何方法: dumpbin.exe-导出ActiveXTest.dll 转储文件ActiveXTest.dll 文件类型:DLL 总结 2000.重新登记 2000.rsrc 2000.案文 怎么了 DLL看起来不错。。根据文件: namespace

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

我用C开发了一个DLL#

当我尝试调用它时,我得到:

System.EntryPointNotFoundException:找不到名为的入口点:

这意味着DLL不会导出任何从DLL可见的方法。Dumpbin也不显示任何方法:

dumpbin.exe-导出ActiveXTest.dll 转储文件ActiveXTest.dll 文件类型:DLL 总结 2000.重新登记 2000.rsrc 2000.案文

怎么了

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>>");    
        }
    }
}
namespace IWFHotkeyStarter
{
班级计划
{
[DllImport(“D:\\work\\iwf\\\\U ctrl-tab-modless\U dlg\U testing\\activex\\VSProjects\\AcriveXSourceCode\\bin\\Debug\\ActiveXTest.dll”)]
公共外部静态void setHooks();
静态void Main(字符串[]参数)
{
程序p=新程序();
p、 run();
}
私家车{
控制台。写入线(“运行”);
}
}
}
请帮助

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

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

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


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

正如Mario所述,.Net程序集以不同的方式公开库和类,因此DumpBin之类的工具不会显示任何内容-如果您想查看程序集内部,请尝试一下

至于如何调用托管程序集,您展示的()方法用于互操作/调用非托管代码。要在另一个托管程序集中调用方法,只需添加一个程序集引用,就可以很好地看到该方法

另外需要注意的是,在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();
        }
    }
}

正如Mario所说,.Net程序集以不同的方式公开库和类,因此DumpBin之类的工具不会显示任何内容-如果您想查看程序集内部,请尝试一下

至于如何调用托管程序集,您展示的()方法用于互操作/调用非托管代码。要在另一个托管程序集中调用方法,只需添加一个程序集引用,就可以很好地看到该方法

另外需要注意的是,在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();
        }
    }
}

你试过使用“添加引用”选项吗?等等,我才意识到。您的DLL是托管代码吗?如果是这样,那么正如vash47所说,只需添加一个引用即可。别这样做!这通常适用于非托管DLL。@Vash47您应该回答-另一个用户抢先回答,您不能接受注释作为答案。:)你试过使用“添加引用”选项吗?等等,我才意识到。您的DLL是托管代码吗?如果是这样,那么正如vash47所说,只需添加一个引用即可。别这样做!这通常适用于非托管DLL。@Vash47您应该回答-另一个用户抢先回答,您不能接受注释作为答案。:)好的…。1) 我添加了对DLL的引用(2)注释掉[DllImport(“D:\\work\\iwf\\\U ctrl-tab-modl………现在我得到未处理的异常:System.TypeLoadException:无法从程序集“IWFHotkeyStarter,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“IWFHotkeyStarter.Program”,因为方法“setHooks”没有实现(没有RVA)。我做错了什么?@michaels123您还应该删除
程序
类中
setHooks
extern
声明-对于其他引用的.Net程序集,您不需要使用
extern
声明方法。好的……我知道了……谢谢……现在我有另一个问题。这个钩子是一个全局热键句柄r并且看起来在我设置一次之后,这个代码不再加载,当用户按下热键时,我的方法也不会被调用……也许我需要编写一个始终在内存中的守护进程?@michaels我不确定我是否理解-你最好为你的新问题问一个新问题。好的我添加了对DLL的引用(2)注释掉[DllImport(“D:\\work\\iwf\\\U ctrl-tab-modl………现在我得到未处理的异常:System.TypeLoadException:无法从程序集“IWFHotkeyStarter,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“IWFHotkeyStarter.Program”,因为方法“setHooks”没有实现(没有RVA)。我做错了什么?@michaels123您还应该删除
程序
类中
setHooks
extern
声明-对于其他引用的.Net程序集,您不需要使用
extern
声明方法。好的……我知道了……谢谢……现在我有另一个问题。这个钩子是一个全局热键句柄r并且看起来在我设置一次之后,这个代码不再加载,当用户按下热键时,我的方法也不会被调用……也许我需要编写一个始终在内存中的守护进程?@michaels我不确定我是否理解-你最好为你的新问题问一个新问题。