这里讲了调用Com
http://www.csdn.net/Develop/read_article.asp?id=27249

解决方案 »

  1.   

    项目-〉引用-〉com
    找到你的dll
      

  2.   

    注意,你的DLL并不是COM,它只是普通的Win32 DLL,所以,调用规则有一定的变化:
    你要调用int fnNetdll22(),需要将你的DLL拷贝到你的应用程序目录下,或者在DLLImport中给出绝对路径。
      

  3.   

    用dependency工具看看你的dll,看看函数名称是否正确
    在“fnNetdll22”的前面可能有其他字符的
      

  4.   

    我也遇到过同样的问题 这样解决的
    [DllImport("d:\\mydll.dll",EntryPoint="MyFunction")]
    public static extern int MyFun(int i);
    你把你的改为这样看看
    [DllImport("netdll2.dll",EntryPoint="fnNetdll2")]
    public static extern int fnNetdll22();
    还有确定你的DLL文件的路径
    程序搜索DLL文件的顺序:
    包含EXE文件的目录
    进程的当前工作目录
    WINDOWS系统目录
    WINDOWS目录
    列在PATH环境变量中的一系列目录
      

  5.   

    还有 由于你是引入非托管函数
    你要把它声明为摸个类的静态外部成员

    public class DLL
    {
    [DllImport("d:\\mydll.dll",EntryPoint="MyFunction")]
    public static extern int MyFun(int i);
    } private void Form1_Load(object sender, System.EventArgs e)
    {
     DLL.MyFun(1);
    }
      

  6.   

    你调用的是一个用c++写的class,用一般的方法没有用的,你在试图初始化这个类,必须在写这个class的时候考虑用c程序怎么调,然后,在c#中[DllImport...]的方式,初始化这个class
      

  7.   

    多谢各位的帮助。有大家的提示,问题我解决了,是因为我的导出函数名前后有乱码(该死的MS,没事给我加这些乱码干吗!),所以#报找不到入口点了,解决的办法是加上EntryPoint把乱码赋给它,或者在dll编写的时候,加上def文件,把导出函数名改回来。