想了解一下有关dll方面的知识。写了一段程序,编译成dll,引用后报错:无法在DLL中找到名SampleMethod(int i)为的入口点。其中SampleMethod(int i)为我程序中的一个方法。这是怎么回事?

解决方案 »

  1.   

    本地dll的话,可能你没有正确导出SampleMethod(int i)。托管dll的话,可能是可见范围问题(public,private)。
      

  2.   

    无法在DLL中找到名SampleMethod(int i)为的入口点
    --------------------------------------------
    估计没正确引入
      

  3.   

    使用DLL imPORT
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  4.   

    路过
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  5.   

    从托管应用程序调用非托管代码   
      当调用用户定义的   DLL   中所包含的函数时,有必要将   extern   "C"   添加在   DLL   函数声明之前,如下所示:   
      The   function   declaration   in   SampleDLL.h   file   
      extern   "C"   SAMPLEDLL_API   int   fnSampleDLL(void);   
        
      详见http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/vcwlksysimportattributetutorial.asp
      

  6.   

    .net中的class默认为internal,你将class改为public再试吧
      

  7.   

    无法找到类说明dll没正确添加引用
    无法在DLL中找到名SampleMethod(int i)为的入口点说明没有访问此方法的权限,private?/protect??
      

  8.   

    class      私有public SampleMethod(int i)
      

  9.   

    有放到自定义的类中,我把SampleMethod(int i)方法封装在一个类里,然后编译成dll的
      

  10.   

    C#调用C++编写的COM DLL    
    http://www.cnblogs.com/tallman/archive/2007/04/27/729048.html 
        
    C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况) 
    http://www.cppblog.com/kerlw/archive/2007/06/27/27061.html 
      

  11.   

    比如
    我这样:
    class Test
    {
    public int SampleMethod(int i)
    {
        return i*10;
    }
    }
    把这编译成dll
    然后,在下面的程序中引入
    using System;
    using System.Runtime.InteropServices;class Test
    {
    [DllImport("Add.dll",EntryPoint="SampleMethod")]
    public static extern int SampleMethod(int i);
    static int Main()
    {
    return SampleMethod(5);
    }
    }
    然后就报EntryPointNotFoundException异常
      

  12.   

    直接右键添加引用引用这个DLL。
    在程序里:Test test=new Test(); 
    int aaa=   test.SampleMethod(1);
      

  13.   

    C#的DLL和windows的标准dll不是一样的东西,不能直接这么用。
      

  14.   

    dll调用有问题
      

  15.   

    你写的这个DLL也是C#环境下编译成的,不是C/C++环境下编译成的,没有必要用下面的方法.
    [DllImport("Add.dll",EntryPoint="SampleMethod")]
    public static extern int SampleMethod(int i);用下面的方法就可以了:
    直接右键添加引用引用这个DLL。 
    using ClassLibrary1;
    namespace ConsoleApplication1
    {
        class Program
        {
            static int Main(string[] args)
            {
                Test test = new Test();
                return test.SampleMethod(5);
            }
        }
    }
      

  16.   

    -_-!! 如果我不在vs平台,怎么添加?我全在命令窗口进行的。
    而且按出现的异常来看,按理已经引用到了dll,只是找不到入口点。是编译成dll的程序本身的问题吗?
      

  17.   

    再加100分求个正解!我只要求在命令窗口都能正常引用到自定义的dll
      

  18.   

    定义的调用顺序有问题,如 stdcall ,safecall等,楼主调试看看
      

  19.   

    这种问题
    第一,没有添加引用
    第二,如果你是默认建的,要修改class为public,方法也是public,注意是不是修改好了
      

  20.   

    如果是控制台,你要注意把dll放在了微软默认的路径
      

  21.   

    不管在什么窗口,你不就是想要调用DLL吗,你可以动态调用DLLAssembly MyAssembly=Assembly.LoadFrom("example.dll"); //传入类库的文件名
    Type t = MyAssembly.GetType("Example.Class1"); //传入"名空间.类名"object obj=Activator.CreateInstance(t); //生成Example.Class1类的实例
         
    MethodInfo m=t.GetMethod("Add"); //获得"Add"方法if (m!=null) //如果获得Add方法
    {
       object[] param=new object[2]; //Add方法有两个参数,如果没有参数则用new object[0];
       param[0] = 1; //第一个参数传入1
       param[1] = 2; //第二个参数传入2
       int total = (int)m.Invoke(obj, param); //total的值为1+2=3
    }
           文件开头添加引用using System.Reflection;
      

  22.   

    谢谢timelyraining,你的方法虽然和我原先的意愿有些背离,不过也能解决问题。谢啦
      

  23.   

    引用后可直接使用如果class编写没有问题的话
      

  24.   

    我就奇怪用DllImport为什么会出现那个问题
      

  25.   

    也算有个结果了,结帐!再次感谢谢谢timelyraining