我的程序里需要调用一个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下也同样会有这个问题.
这会是什么原因呢?
于是我在程序中用如下写法:
[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下也同样会有这个问题.
这会是什么原因呢?
function gen_dkga02(DRN:string; out_DecodeKey: PCHAR): Longint;
stdcall; external 'sta_dll.dll';
你可以反射试试!
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");