解决方案 »

  1.   

    一般非托管dll和程序exe放在一个根目录,使用第二种方式。
    第一种是指定dll的绝对路径
    使用上没区别
      

  2.   

    http://www.cnblogs.com/szytwo/archive/2011/12/11/2283780.html
      

  3.   

    没什么区别都能运行不过我们习惯了把非托管的扔到system32下 所以采用第二种方式.如果是托管的 添加引用就自动在运行程序的目录下了.
      

  4.   

    第二种形式可以让你的托管程序集在使用Any CPU方式编译时,能根据运行环境动态选择加载32位还是64位的非托管dll。所以一般如果自己能确定环境,那么用第一种方式比较方便。而如果不能确定,比如你想封装一个非托管的库给别人用,它32位和64位形式都有,可以采用第二种方式。这种方式十分灵活,但是写起来比较麻烦。微软自己的SqlCe的托管程序集就是用第二种方式封装的。这两种方式也可以混合使用。开始就根据环境用LoadLibrary预先加载合适的非托管dll,DllImport的时候因为已经加载了就不会再加载了。SQLite的托管程序集就是用这样的混合方式。当然这一样需要处理不同环境下marshal的方式。