在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全在工程目录下。
后来换成在项目属性里附加依赖项的方法也没有成功。
求解! 展开
#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全在工程目录下。
后来换成在项目属性里附加依赖项的方法也没有成功。
求解! 展开
展开全部
你单步调试下,就可以找到具体问在哪了!
//////////////////////////
我认为你这弄错了,没有声明“C”
_declspec(dllimport) void display();;
上面这应该改成:extern "C" void __declspec(dllimport) play();
换这个应该OK了。。
//////////////////////////
我认为你这弄错了,没有声明“C”
_declspec(dllimport) void display();;
上面这应该改成:extern "C" void __declspec(dllimport) play();
换这个应该OK了。。
追问
大虾就是大虾啊。但是我还是有一点不明白,孙鑫的书上说extern “C”是为了解决编译器对函数名字改编规则不一样而存在的,但是我的dll和使用这个dll都是在vs2005下做的啊,为什么也要必须用这个呢?
刚接触这个vs2005,不熟悉。
追答
因为你是通过C来编写的DLL,调用也是用C,所以要声明
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询