VC 加载dll调用函数

求教:MFC工程中,我需要调用shell32.dll函数中的SHCreateDirectoryEx函数创建一个多级目录,而::符号后面所在的函数中找不到SHCreateD... 求教:
MFC工程中,我需要调用 shell32.dll 函数中的 SHCreateDirectoryEx 函数创建一个多级目录,而 ::符号后面所在的函数中找不到 SHCreateDirectoryEx 这个,求教如何在MFC工程中动态添加这个 shell32.dll 并使用其中的函数。
还有我查看进程加载的 dll 中有 shell32.dll 函数,如果程序本身有加载 shell32.dll 函数,是不是可用直接调用 SHCreateDirectoryEx 函数,求调用方式,谢谢赐教
展开
 我来答
zhaozhi6862179
推荐于2016-09-25 · TA获得超过3546个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:17.1万
展开全部
  加载调用DLL有两种方法:静态调用和动态调用。
(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;
5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib。
6.选择你的目标工程Head Files加入:youApp.h文件;
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
{
HINSTANCE hDllInst = LoadLibrary("youApp.DLL");
if(hDllInst)
{
typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
MYFUNC youFuntionNameAlias = NULL; // youFuntionNameAlias 函数别名
youFuntionNameAlias = (MYFUNC)GetProcAddress
(hDllInst,"youFuntionName");
// youFuntionName 在DLL中声明的函数名
if(youFuntionNameAlias)
{
youFuntionNameAlias(param1,param2);
}
FreeLibrary(hDllInst);
}
}
spacife
2012-01-17 · TA获得超过108个赞
知道小有建树答主
回答量:64
采纳率:0%
帮助的人:91.6万
展开全部
楼上的是一种方案,还可以在你的工程里加入以下语句,这时::作用域符就可以访问得到了。
#include <ShellAPI.h>
#pragma comment(lib, "shell32.lib")
如果是VC6按以下操作
打开工具栏Project->Setting.s..
出现配置窗口
选择C/C++
Category选择Preprocessor
在Additional include directories
添加C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE

设置完成后
在程序中添加引入库
#pragma comment(lib, "C:\\Program Files\\Microsoft Platform SDK\\Lib\\shell32.lib")
这样应该可以成功完成编译了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
btlec0553
2012-01-17
知道答主
回答量:9
采纳率:0%
帮助的人:6.9万
展开全部
动态加载,1、创建函数指针
2、加载DLL文件HINSTANCE hins=LoadLibrary(" shell32.dlll")
3、得到函数地址GetProcAddress
4、就可以使用该函数了(用函数指针)
5、FreeLibrary(hins)结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
csuideal
推荐于2018-03-09 · TA获得超过338个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:186万
展开全部
//声明DLL函数
typedef int  (pFunc)( HWND hwnd,   LPCTSTR pszPath,   SECURITY_ATTRIBUTES *psa   );
//声明函数句柄
pFunc myProc=NULL;
//加载DLL
HINSTANCE hins=AfxLoadLibrary(" shell32.dlll");
myProc=(NEWWINDOWPROC)GetProcAddress((HMODULE)hins,(LPCTSTR)"SHCreateDirectoryEx ");
//使用
myProc( hwnd, pszPath, psa);
更多追问追答
追问
我喜欢这种方法,但麻烦给个 SHCreateDirectoryEx 的例子好吗? 我按你的方法做相应的修改后出现8处错误,再三改正下还出现1处错误,不懂怎么回事,小弟刚学不久,谢谢。
追答
#include 
#include
using namespace std;

int main()
{

//参数传入自己的参数就可以了
HWND hwnd;
LPCTSTR pszPath;
SECURITY_ATTRIBUTES *psa;

//声明DLL函数
typedef int (*pFunc)( HWND , LPCTSTR , SECURITY_ATTRIBUTES *);
//声明函数句柄
pFunc myProc=NULL;
//加载DLL
HINSTANCE hins=LoadLibrary("shell32.dlll");
myProc=(pFunc)GetProcAddress((HMODULE)hins,(LPCTSTR)"SHCreateDirectoryEx ");
//使用
myProc( hwnd, pszPath, psa);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiabin1002
2012-01-17
知道答主
回答量:8
采纳率:0%
帮助的人:1.3万
展开全部
你在使用的这个类中添加
HINSTANCE hInst;
hInst=LoadLibrary("Dll3.dll");
兄弟你添加这个这样试试看

参考资料: 孙鑫第19章

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式