大佬们帮帮忙,关于dll加载的

blackier 2018-04-22 10:27:28
求用以下一个或多个函数实现的dll加载的完整出来!
怼这几个函数怼了一个晚上还是没能正确加载dll
不要跟我说系统目录或者path之类的,我要的就是和main.exe在不同目录下的加载

SetDllDirectory()
LoadLibrary()
LoadLibraryEx()

网上都只是说这几个函数怎么用的,但是没有一个完整的代码!
我自己怎么写都没对,只好来问问你们了
希望能给个完整的代码出来
...全文
832 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
白色一大坨 2018-05-07
  • 打赏
  • 举报
回复
引用 12 楼 qq_34194662 的回复:
[quote=引用 10 楼 phenix2009 的回复:] 小兄弟脾气有点急啊,这个动态加载的,我一般用LoadLibrary,也觉得没什么特别的,之前做过一个工程,是dll里面封装个界面,接口名Show,用另外一个程序调用接口显示对话框的,调用代码给你贴上看看: hInstance = LoadLibrary(_T("JLtechDll.dll")); // 生成的dll文件名 typedef void (*TESTDLL)(Pic_Location *); Pic_Location Data; if (hInstance != NULL) { TESTDLL TestShow = (TESTDLL)GetProcAddress(hInstance, "Show"); if (TestShow != NULL) { TestShow(&Data); } } FreeLibrary(hInstance); 动态库那边是这么声明的: extern "C" __declspec(dllexport) void Show(Pic_Location * p)
额我脾气确实有点糟了,毕竟忙了很久都不懂,然后题目都说明了还是有人就这样回答了,心情很糟,我大致懂得我错在哪了,谢谢你的回复[/quote] 能解决问题就好,记得保持冷静,不然编码会很困难
blackier 2018-05-06
  • 打赏
  • 举报
回复
引用 10 楼 phenix2009 的回复:
小兄弟脾气有点急啊,这个动态加载的,我一般用LoadLibrary,也觉得没什么特别的,之前做过一个工程,是dll里面封装个界面,接口名Show,用另外一个程序调用接口显示对话框的,调用代码给你贴上看看: hInstance = LoadLibrary(_T("JLtechDll.dll")); // 生成的dll文件名 typedef void (*TESTDLL)(Pic_Location *); Pic_Location Data; if (hInstance != NULL) { TESTDLL TestShow = (TESTDLL)GetProcAddress(hInstance, "Show"); if (TestShow != NULL) { TestShow(&Data); } } FreeLibrary(hInstance); 动态库那边是这么声明的: extern "C" __declspec(dllexport) void Show(Pic_Location * p)
额我脾气确实有点糟了,毕竟忙了很久都不懂,然后题目都说明了还是有人就这样回答了,心情很糟,我大致懂得我错在哪了,谢谢你的回复
白色一大坨 2018-05-04
  • 打赏
  • 举报
回复
小兄弟脾气有点急啊,这个动态加载的,我一般用LoadLibrary,也觉得没什么特别的,之前做过一个工程,是dll里面封装个界面,接口名Show,用另外一个程序调用接口显示对话框的,调用代码给你贴上看看: hInstance = LoadLibrary(_T("JLtechDll.dll")); // 生成的dll文件名 typedef void (*TESTDLL)(Pic_Location *); Pic_Location Data; if (hInstance != NULL) { TESTDLL TestShow = (TESTDLL)GetProcAddress(hInstance, "Show"); if (TestShow != NULL) { TestShow(&Data); } } FreeLibrary(hInstance); 动态库那边是这么声明的: extern "C" __declspec(dllexport) void Show(Pic_Location * p)
白色一大坨 2018-05-04
  • 打赏
  • 举报
回复
我的建议,加载失败的话,看一下函数的返回值,比如LoadLibrary在加载成功时候返回的是一个句柄值,如果为NULL时,表示没加载成功; 如果没加载成功的话,我建议你查一下你调用的dll,路径是一方面,另一方面,你调用的dll,会不会也调用了其他的dll程序导致依赖不足无法调用; 如果返回不是NULL那么查看加载函数那块能不能过去,如果出现故障就是函数的加载问题了,总之具体问题具体分析,因为你没公布你的代码,也没提供你用来调用的动态库,所以其他人只能大面上给你建议,无法具体的对你进行指点。
老王爱上猫 2018-05-04
  • 打赏
  • 举报
回复
你把你写的贴出来
凌乱哥 2018-04-24
  • 打赏
  • 举报
回复
		wchar_t chDir[MAX_PATH] = {0};
		GetCurrentDirectory(MAX_PATH, chDir);
		SetCurrentDirectory(_T("C:\\Test"));
		m_hLibInst = LoadLibraryEx(_T("C:\\Test\\my.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
		SetCurrentDirectory(chDir);
赵4老师 2018-04-23
  • 打赏
  • 举报
回复
blackier 2018-04-23
  • 打赏
  • 举报
回复
没人能给个完整点的代码出来么。。。
zgl7903 2018-04-23
  • 打赏
  • 举报
回复
SetDllDirectory 估计就是 SetCurrentDirectory 其它的都差不多一样
blackier 2018-04-23
  • 打赏
  • 举报
回复
引用 6 楼 gspuser 的回复:
你要调试exe和dll不在同一路径的情况下,首先你要先调试完成dll和exe在同一路径下的情况, 如果这个调通了,只要把loadlibrary那一句改成dll的绝对路径就能改成dll和exe不在同一路径的情况。 至于你的第一步,调试dll和exe在同一路径下的,VC动态调用dll 百度搜索一大堆 https://blog.csdn.net/wei801004/article/details/420864 https://blog.csdn.net/lid0770/article/details/1549345
别贴这些链接,没用,我看过很多这些的,就是自己写不对才要个你们自己写的完整程序,如果没有自己写过,都不清楚里面的难处在哪,就别回复我了。
gspUser 2018-04-23
  • 打赏
  • 举报
回复
用绝对路径就好了 比如 hDllInst=LoadLibrary("C:\\123\\FormDll.dll");
gspUser 2018-04-23
  • 打赏
  • 举报
回复
你要调试exe和dll不在同一路径的情况下,首先你要先调试完成dll和exe在同一路径下的情况, 如果这个调通了,只要把loadlibrary那一句改成dll的绝对路径就能改成dll和exe不在同一路径的情况。 至于你的第一步,调试dll和exe在同一路径下的,VC动态调用dll 百度搜索一大堆 https://blog.csdn.net/wei801004/article/details/420864 https://blog.csdn.net/lid0770/article/details/1549345
blackier 2018-04-23
  • 打赏
  • 举报
回复
引用 1 楼 gspuser 的回复:
用绝对路径就好了 比如 hDllInst=LoadLibrary("C:\\123\\FormDll.dll");
引用 2 楼 zgl7903 的回复:
SetDllDirectory 估计就是 SetCurrentDirectory 其它的都差不多一样
这些东西我都懂,我写的出来,但结果不对,所以才想求个完整的代码,你们这都不看我要求的,老实说真的觉得鸡同鸭讲

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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