我的程序里需要调用一个dll文件,我在项目中想引用,提示:不能引用,确保此文件可以访问并且是一个有效的程序集或COM组件.
于是我在程序中用如下写法:
        [DllImport("sta_dll.dll", EntryPoint = "gen_dkga02")]
        private static extern long gen_dkga02(string DRN, out string DecodeKey);

        [DllImport("sta_dll.dll")]
        private static extern long gen_dkga02(string DRN, out string DecodeKey);可在运行时都提示无法加载此dll,找不到指定的模块.......
我将sta_dll.dll放在与EXE相同的目录或WINDOWS\SYSTEM32下也同样会有这个问题.
这会是什么原因呢?

解决方案 »

  1.   

    在DELPHI中可以用如下方法调用成功:
    function gen_dkga02(DRN:string; out_DecodeKey: PCHAR): Longint;
                                stdcall;  external 'sta_dll.dll';
      

  2.   

    提示:不能引用,确保此文件可以访问并且是一个有效的程序集或COM组件. 说明此文件不能被引用,它不是一个有效的组件,请检查此组件是否支持.net
      

  3.   

    你试一下将.dll文件放入工程的debug目录下
      

  4.   

    可能是dll程序集的问题?
    你可以反射试试!
      

  5.   

    使用反射机制调用方法的四步曲:
    1 加载程序集
    2 获取类的类型
    3 创建该类的实例
    4 调用该实例的方法
    forexmaple(DALFactory.cs)
    1
    2
    3
    /// <summary>
            /// 建立命名空间
            /// </summary>
            /// <param name="className">动态加载到Assembly</param>
            /// <returns></returns>
            public static object CreateInstance(string className)
            {
                return Assembly.Load(path).CreateInstance(string.Format("{0}.Data.{1}.{2}", path, dbType, className));
            }
    4 private IPropertyChangedInfo Ipcf = (IPropertyChangedInfo)DALFactory.CreateInstance("DalPropertyChangedInfo");