关于C++加载DLL文件 用的LoadLibrary方法的问题 20
能不能给我一个实例。我现在DLL已经生成好了名字是TestDLL.dll_declspec(dllexport)intclFun(inta,intb){intmynum=...
能不能给我一个实例。我现在DLL已经生成好了名字是TestDLL.dll
_declspec(dllexport) int clFun(int a, int b)
{
int mynum = a+b;
return mynum;
}
是一个加法。。请问我怎么在我的Main函数里调用这个TestDLL.dll里的clFun函数??
现在的问题是。。他输出显示 "加载DLL失败,程序退出"
没有调用。。如果实际调用到他的这个函数的话。 在哪里调?比如我要调用
clFun(1,2)返回的应该是3。请问怎么调!万分感谢 展开
_declspec(dllexport) int clFun(int a, int b)
{
int mynum = a+b;
return mynum;
}
是一个加法。。请问我怎么在我的Main函数里调用这个TestDLL.dll里的clFun函数??
现在的问题是。。他输出显示 "加载DLL失败,程序退出"
没有调用。。如果实际调用到他的这个函数的话。 在哪里调?比如我要调用
clFun(1,2)返回的应该是3。请问怎么调!万分感谢 展开
4个回答
展开全部
LoadLibrary不是加载DLL文件,LoadLibrary出现是系统设置错谨蚂卜误导致。
如下参考:
1.按下Win+R组合键,输入控件,点击“确定”按钮,打开控制面板,如下图所示。
2.在控制面板界面,点击“硬件和声音”按钮,如下图所示。
3.再次点击“电源选项”按钮。
4.根据需要修改“balance”、“highperformance”等计划属性,分别点击“changeplanSettings”按钮。
5.再次点击“更改高级电源设置”按钮。
6.在电源选项窗口中,找到“可切换动态显卡-全局设置-性能最大化”物凳选项,将相应的“用电量”和“开机电量”修改为“性能最大化”。此时祥穗,设置了power属性。
展开全部
/*
【1】静态调用
把TestDLL.lib和TestDLL.dll拷贝到你的测试工程下
你的dll声明方法_declspec(dllexport)是想要静态调用dll,所以需要添加如下代码:
//*/
#pragma comment(lib,"TestDLL.lib") /*(1)包含库文件,不写这句话,就需要通过程序配置包含这个库*/
_declspec(dllimport) int clFun(int a, int b);/*(2)声明函数是从dll中谈悉调用的,不写这句话,就需要包含头文件*/
void main()
{
int a = 1,b = 2,c =0;
c = clFun(a,b);
}
/*
【2】动态调用
你想用LoadLibrary方法,就属于动态调用,这时可以不物侍销加你的声明_declspec(dllexport),只需要在TestDLL工程目录下的.def文件中把你要调用的函数名加进去
【
; TestDLL.def : 声明 DLL 的模块参数。
LIBRARY "TestDLL"
EXPORTS
; 此罩游处可以是显式导出
clFun
】
接下来TestDLL.dll拷贝到你的测试工程下,添加如下代码:
//*/
void main()
{
int a = 1,b = 2,c =0;
//定义一个函数指针
typedef int (* Any_name)(int param1, int param2);
//定义一个函数指针变量
Any_name pfFuncInDll = NULL;
//加载dll
HINSTANCE hinst=LoadLibrary(L"TestDLL.dll");
if ( hinst != NULL )
{
//找到dll的clFun函数
pfFuncInDll = (Any_name)GetProcAddress(hinst, "clFun");
//调用dll里的函数
if (pfFuncInDll != NULL )
{
c = pfFuncInDll(a,b);
}
FreeLibrary(hinst);
}
}
【1】静态调用
把TestDLL.lib和TestDLL.dll拷贝到你的测试工程下
你的dll声明方法_declspec(dllexport)是想要静态调用dll,所以需要添加如下代码:
//*/
#pragma comment(lib,"TestDLL.lib") /*(1)包含库文件,不写这句话,就需要通过程序配置包含这个库*/
_declspec(dllimport) int clFun(int a, int b);/*(2)声明函数是从dll中谈悉调用的,不写这句话,就需要包含头文件*/
void main()
{
int a = 1,b = 2,c =0;
c = clFun(a,b);
}
/*
【2】动态调用
你想用LoadLibrary方法,就属于动态调用,这时可以不物侍销加你的声明_declspec(dllexport),只需要在TestDLL工程目录下的.def文件中把你要调用的函数名加进去
【
; TestDLL.def : 声明 DLL 的模块参数。
LIBRARY "TestDLL"
EXPORTS
; 此罩游处可以是显式导出
clFun
】
接下来TestDLL.dll拷贝到你的测试工程下,添加如下代码:
//*/
void main()
{
int a = 1,b = 2,c =0;
//定义一个函数指针
typedef int (* Any_name)(int param1, int param2);
//定义一个函数指针变量
Any_name pfFuncInDll = NULL;
//加载dll
HINSTANCE hinst=LoadLibrary(L"TestDLL.dll");
if ( hinst != NULL )
{
//找到dll的clFun函数
pfFuncInDll = (Any_name)GetProcAddress(hinst, "clFun");
//调用dll里的函数
if (pfFuncInDll != NULL )
{
c = pfFuncInDll(a,b);
}
FreeLibrary(hinst);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可败唤哪以参考如下语法:察码
HINSTANCE hDLL; // DLL句柄
typedef int __stdcall (*DLLFUN)(int a, int b);
DLLFUN Dll_clFun;
//读取:
if(hDLL == NULL)
hDLL=LoadLibrary((LPCTSTR)"TestDLL.dll");
if(hDLL)
{
Dll_clFun =(DLLFUN)GetProcAddress(hDLL,"clFun");
}
else
{
ShowMessage("加载DLL失败,程序退出");
}
//释放链谈:
if(hDLL)
{
FreeLibrary(hDLL); // 卸下DLL
hDLL = NULL;
}
HINSTANCE hDLL; // DLL句柄
typedef int __stdcall (*DLLFUN)(int a, int b);
DLLFUN Dll_clFun;
//读取:
if(hDLL == NULL)
hDLL=LoadLibrary((LPCTSTR)"TestDLL.dll");
if(hDLL)
{
Dll_clFun =(DLLFUN)GetProcAddress(hDLL,"clFun");
}
else
{
ShowMessage("加载DLL失败,程序退出");
}
//释放链谈:
if(hDLL)
{
FreeLibrary(hDLL); // 卸下DLL
hDLL = NULL;
}
追问
DLLFUN Dll_clFun;报错。。DLLFUN未声明的 这是什么?
typedef int __stdcall (*DLLFUN)(int a, int b); 报错。。语法错误:“(”
追答
详细错误是在第几行呢?
试试把:
HINSTANCE hDLL; // DLL句柄
改成
HINSTANCE hDLL=NULL ; // DLL句柄
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#pragma comment(lib, "TestDLL.lib"李激扰简)
include 头文件
然后哪李袜你懂的
include 头文件
然后哪李袜你懂的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询