C# Can';在DLL中看不到方法。。。为什么?
在DLL中看不到方法。。。为什么? 我用C开发了一个DLL# 当我尝试调用它时,我得到: System.EntryPointNotFoundException:找不到名为的入口点: 这意味着DLL不会导出任何从DLL可见的方法。Dumpbin也不显示任何方法: dumpbin.exe-导出ActiveXTest.dll 转储文件ActiveXTest.dll 文件类型:DLL 总结 2000.重新登记 2000.rsrc 2000.案文 怎么了 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
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我不确定我是否理解-你最好为你的新问题问一个新问题。