调用外部DLL

zhangguiyou 2010-05-27 06:42:34
C#如何调用外部的DLL,
比如,我有一个DLL,名字为test.dll,里面有一个类testClass,方法名test().
我如何才能够调用这个dll里面的test方法呢?(不能在程序添加引用,DLL名字、方法名等信息要用变量付值)
...全文
206 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yardloun 2011-06-02
  • 打赏
  • 举报
回复
得看你这个dll是什么类型的,托管的还是非托管的呢?
C#编写的,还是VC编写的win32类型的,你用depends程序打开dll,看看都输出了哪些函数接口,然后用3楼说的办法调用即可

如果是c#写的,就要把DLL添加进工程,引用这个方法即可
ruankuo38646 2011-04-23
  • 打赏
  • 举报
回复
应用命名空间 在把类库里面的 类实例不就可以调用了吗
技术小牛 2011-04-23
  • 打赏
  • 举报
回复
你变量赋值动态的dll文件名字,也应该可以用反射来做嘛,干嘛要用api这么复杂高深呢
zhouxingyu896 2010-07-20
  • 打赏
  • 举报
回复
要查看下Dll源代码
zhouxingyu896 2010-07-20
  • 打赏
  • 举报
回复
没有找到这个函数的入口点是Dll有问题,Dll里面没有加上外部引出的语句
huangkangyi163 2010-06-26
  • 打赏
  • 举报
回复
引入外部DLL的命名空间就可以调用啊
tianyapiaoboke 2010-06-06
  • 打赏
  • 举报
回复
写得复杂了吧
FtLover 2010-06-03
  • 打赏
  • 举报
回复

object o=new Assembly.LoadFile(mod).CreateInstance("typename");
if(o!=null && o is 类名)
{
(o as 类名).text();
}
FtLover 2010-06-03
  • 打赏
  • 举报
回复
伟大的反射技术。
Carpathia 2010-06-03
  • 打赏
  • 举报
回复
函数入口点就是函数名,要确保这个DLL当中的有对外的开放的这个接口函数
[DllImport("kernel32", EntryPoint = "FreeLibrary", SetLastError = true)]
public void aaaa(string lpFileName, string lpProcName)
这样写的函数入口点就是FreeLibrary
如果只写
[DllImport("kernel32",SetLastError = true)]
public void aaaa(string lpFileName, string lpProcName)
则函数入口点为aaaa
zhangguiyou 2010-05-27
  • 打赏
  • 举报
回复
调用的时候,老是说
没有找到这个函数的入口点
请问。函数的入口点是什么,怎么定议和使用
zhangguiyou 2010-05-27
  • 打赏
  • 举报
回复

/// <summary>
/// 原型是 :HMODULE LoadLibrary(LPCTSTR lpFileName);
/// </summary>
/// <param name="lpFileName">DLL 文件名 </param>
/// <returns> 函数库模块的句柄 </returns>
[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string lpFileName);
/// <summary>
/// 原型是 : FARPROC GetProcAddress(HMODULE hModule, LPCWSTR lpProcName);
/// </summary>
/// <param name="hModule"> 包含需调用函数的函数库模块的句柄 </param>
/// <param name="lpProcName"> 调用函数的名称 </param>
/// <returns> 函数指针 </returns>
[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
/// <summary>
/// 原型是 : BOOL FreeLibrary(HMODULE hModule);
/// </summary>
/// <param name="hModule"> 需释放的函数库模块的句柄 </param>
/// <returns> 是否已释放指定的 Dll</returns>
[DllImport("kernel32", EntryPoint = "FreeLibrary", SetLastError = true)]
static extern bool FreeLibrary(IntPtr hModule);
/// <summary>
/// Loadlibrary 返回的函数库模块的句柄
/// </summary>
private IntPtr hModule = IntPtr.Zero;
/// <summary>
/// GetProcAddress 返回的函数指针
/// </summary>
private IntPtr farProc = IntPtr.Zero;
/// <summary>
/// 获得函数指针
/// </summary>
/// <param name="lpFileName"> 包含需调用函数的 DLL 文件名 </param>
/// <param name="lpProcName"> 调用函数的名称 </param>
public void LoadFun(string lpFileName, string lpProcName)
{ // 取得函数库模块的句柄
hModule = LoadLibrary(lpFileName);
// 若函数库模块的句柄为空,则抛出异常
if (hModule == IntPtr.Zero)
throw (new Exception(" 没有找到 :" + lpFileName + "."));
// 取得函数指针
farProc = GetProcAddress(hModule, lpProcName);
// 若函数指针,则抛出异常
if (farProc == IntPtr.Zero)
throw (new Exception(" 没有找到 :" + lpProcName + " 这个函数的入口点 "));
}

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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