无法在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>>");
}
}
}
请帮忙
答案 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();
}
}
}