在vs2005中动态加载dll可以,但静态加载就不行了

动态加载代码如下:#include"stdafx.h"#include"windows.h"#include"iostream"usingnamespacestd;//#... 动态加载代码如下:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
//#pragma comment(lib,"dll5.lib")
//_declspec(dllimport) int add(int a,int b);
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE h=LoadLibrary(L"dll5.dll");
typedef void (*address)();
address display=(address)GetProcAddress(h,"display");
if(!display)
cout<<"failed to get address!"<<endl;
else
{display();cout<<endl<<"ooo"<<endl;}
return 0;
}
静态加载:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
#pragma comment(lib,"dll5.lib")

_declspec(dllimport) void display();;
int _tmain(int argc, _TCHAR* argv[])
{
/*
HINSTANCE h=LoadLibrary(L"dll5.dll");
typedef void (*address)();
address display=(address)GetProcAddress(h,"display");
if(!display)
cout<<"failed to get address!"<<endl;
else
{display();cout<<endl<<"ooo"<<endl;}
*/

display();
return 0;
}
这是用#pragma comment(lib,"dll5.lib")加载的,dll5.lib 和dll5.dll全在工程目录下。
后来换成在项目属性里附加依赖项的方法也没有成功。
求解!
展开
 我来答
yiwenzhe111
2011-07-20
知道答主
回答量:14
采纳率:0%
帮助的人:12.2万
展开全部
你单步调试下,就可以找到具体问在哪了!
//////////////////////////
我认为你这弄错了,没有声明“C”
_declspec(dllimport) void display();;
上面这应该改成:extern "C" void __declspec(dllimport) play();
换这个应该OK了。。
追问
大虾就是大虾啊。但是我还是有一点不明白,孙鑫的书上说extern “C”是为了解决编译器对函数名字改编规则不一样而存在的,但是我的dll和使用这个dll都是在vs2005下做的啊,为什么也要必须用这个呢?
刚接触这个vs2005,不熟悉。
追答
因为你是通过C来编写的DLL,调用也是用C,所以要声明
xinghun0208
2011-07-20 · TA获得超过151个赞
知道答主
回答量:84
采纳率:100%
帮助的人:17.4万
展开全部
把dll5.lib 加到 工程菜单下的,连接选项卡中试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式