调用dll的问题

xxgclj 2014-08-27 12:56:25
资料上有很多关于调用dll文件的,都是用DllImport,但是说的都是打开已知的dll文件,如果有多个dll供选择,只打开选定的dll文件,事先并不知道是什么名字的dll文件,如何操作?我试了下,没有成功。
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbfool 2014-09-22
  • 打赏
  • 举报
回复
引用 6 楼 xxgclj 的回复:
我用了你说的方法,总是有异常,说未能加载文件或程序集,该模块应包含一个程序集清单。我上网查了下,估计因为我调用的是别人用c写的dll,可能不能这样用。
你先加载LoadLibrary这个API,然后就差不多和C++一样的方式了,自己定义一个委托,通过API把自定义dll中的函数指针指向这个委托,然后执行这委托。 因为具体我没做过,只是听别人是这么做的,所以我也只能说个理论给你。
xxgclj 2014-09-22
  • 打赏
  • 举报
回复
我用了你说的方法,总是有异常,说未能加载文件或程序集,该模块应包含一个程序集清单。我上网查了下,估计因为我调用的是别人用c写的dll,可能不能这样用。
xxgclj 2014-09-22
  • 打赏
  • 举报
回复
此种方法看着可行,我搜了一下。


以下自定义类的代码完成LoadLibrary的装载和函数调用
代码如下:
public class DllInvoke
{
[DllImport("kernel32.dll")]
private extern static IntPtr LoadLibrary(String path);
[DllImport("kernel32.dll")]
private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);
[DllImport("kernel32.dll")]
private extern static bool FreeLibrary(IntPtr lib);
private IntPtr hLib;
public DllInvoke(String DLLPath)
{
hLib = LoadLibrary(DLLPath);
}
~DllInvoke()
{
FreeLibrary(hLib);
}
//将要执行的函数转换为委托
public Delegate Invoke(String APIName,Type t)
{
IntPtr api = GetProcAddress(hLib, APIName);
return (Delegate)Marshal.GetDelegateForFunctionPointer(api,t);
}
}
下面代码进行调用
代码如下:
public delegate int Compile(String command, StringBuilder inf);
//编译
DllInvoke dll = new DllInvoke(Server.MapPath(@"~/Bin/Judge.dll"));
Compile compile = (Compile)dll.Invoke("Compile", typeof(Compile));
StringBuilder inf;
compile(@“gcc a.c -o a.exe“,inf);
sunny906 2014-09-11
  • 打赏
  • 举报
回复
用反射,,,
小小蓝莓 2014-08-29
  • 打赏
  • 举报
回复
http://technet.microsoft.com/zh-CN/library/system.reflection.assembly.loadfrom(v=vs.100) 把要调用的dll路径传进去
xxgclj 2014-08-28
  • 打赏
  • 举报
回复
没人吗???
xxgclj 2014-08-27
  • 打赏
  • 举报
回复

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧