[DllImport(@"D:\Website\Bin\tt.dll", CallingConvention = CallingConvention.StdCall)]是正确的,而[DllImport(@"tt.dll", CallingConvention = CallingConvention.StdCall)]
或[DllImport("tt.dll", CallingConvention = CallingConvention.StdCall)]
都不正确,请教下。

解决方案 »

  1.   

    因为ASP.NET程序是由IIS进程启动的...IIS进程工作目录是%systemroot%\system32...所以除非把要引用的dll复制到%systemroot%\system32,否则就有用全路径...这个涉及到可执行程序路径搜索的概念...建议你补习一下操作系统基础知识...
      

  2.   

    因为我的Dll用vc写的,不太可能将它放置在system32目录下的,
    能否不需要全路径的方式呢?
      

  3.   

    string Path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "tt.dll";
    [DllImport(Path, CallingConvention = CallingConvention.StdCall)]
    ...
    提示错误:说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 
    编译器错误消息: CS0120: 非静态的字段、方法或属性“WebApplicationTest._Test1.Path”要求对象引用
      

  4.   

    我的应用需要放在虚拟服务器上,总不能让网管帮我将dll拷贝到system32目录下面吧?
    请问你们是怎么做的?谢谢了!
      

  5.   

    dll的默认路径是windows\system32下面.你要是不指定它的路径他会自动去这里去找,当然找不到就会出错了.
      

  6.   

    将dll拷贝到system32目录,注册一下
      

  7.   

    这个是跟你IIS的目录有关系..放到系统目录 SYSTEM32下 可以直接使用.
      

  8.   

    在系统的环境变量中添加dll所在的路径
      

  9.   


    你将这句string Path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "tt.dll";
    改为private static string Path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "tt.dll";应该就没问题了,可以不用复制到System32目录下去。
      

  10.   

    private static string Path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "tt.dll";
    [DllImport(DLLPath)]
    ....
    CS0182: 属性参数必须是常量表达式、typeof 表达式或数组创建表达式
    private const string Path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "tt.dll";
    [DllImport(DLLPath)]
    ....
    CS0134: “Path”的类型为“string”。只能用 null 对引用类型(字符串除外)的常量进行初始化
      

  11.   

    如果你要这要放到虚拟服务器上,如果tt.dll是.net版本,你可以用Assembly.Load;如果是其它的你必须要注册,虚拟服务器应该提供这些服务的,你想虚拟服务提供商咨询一下。
      

  12.   

    调用VC 中的DLL,如果DLL中是用类写的,DllImport要怎么写呢?网上有的例子都是dll中写方法,然后DllImport调用,没见过用类写的dll的调用方法,请教一下各位。