首页
社区
课程
招聘
[求助]奇怪的加载动态库的方法,请大家帮忙分析下
发表于: 2007-9-24 23:11 4765

[求助]奇怪的加载动态库的方法,请大家帮忙分析下

2007-9-24 23:11
4765
我知道加载DLL的方法,基本上即:静态和动态,另还算上个延时加载

但最近看到一个别人的工程,在调用另一个DLL中的方法时,既没有用静态方法也没用动态方法,但却神奇的调用了那个动态库内的方法,百思不得其解,后来身边的高手解释说时该工程将动态库的LIB文件已资源形式添加到工程中了,而不是用常规方法。不清楚哪位高手能给予更详尽的解释,谢谢了:)

下面已简单示例对本问题描述:
DLL工程:
//dll3.h
#ifdef MYLIBAPI

#else

#define MYLIBAPI extern "C" __declspec(dllimport)

#endif

MYLIBAPI int g_nResult;

MYLIBAPI int Add(int nLeft, int nRight);

//dll3.cpp
#include <windows.h>

#define MYLIBAPI extern "C" __declspec(dllexport)

#include "dll3.h"

int g_nResult;

int Add(int nLeft, int nRight)
{
        g_nResult = nLeft + nRight;
        return g_nResult;
}

//调用DLL3的测试工程
#include <windows.h>

#include "..\dll3\dll3.h"

//#pragma comment( lib, "dll3")/*常规做法我们编写此行代码,但若去掉此代码,在VC6环境下,我们对本工程以添加文件的方式将dll3.lib文件添加到工程中(它出现在resource files文件夹内),可以通过编译并正常执行,期待高手指点这是其中原由:)*/

void main()
{
        int nLeft = 1, nRight = 2;

        TCHAR sz[10];

        wsprintf(sz, TEXT("%d + %d = %d"),nLeft, nRight, Add(nLeft, nRight));
        MessageBox(NULL, sz, TEXT("数值计算"), MB_OK);
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
不太明白你的意思,不过,程序可以不添加诸如此类的语句#pragma comment( lib, "dll3"),只需将*.iib文件添加到VC的工程中来代替#pragma comment(lib, "dll3")的语句。其于这样做也可以说将*.lib加入了链接,只是不用#pragme...声明而已。
2007-9-24 23:27
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢小虾,我理解也是这样,即只需将*.lib文件添加到VC的工程中来替代#pragma comment(lib, "dll3"),有没有高手给予说明,为什么可以这样,谢谢
2007-9-24 23:42
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
也没什么奇怪的,将*.lib文件添加入工程,VC可能会向link程序添加该库的链接命令,这是IDE自动实现的。
2007-9-24 23:52
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这是编译指令的显式和隐式调用,写在代码中编译器也能够认识,写在配置中则相当于外部编译命令。
2007-9-25 00:44
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
能够理解了  谢谢大家:)
2007-9-26 00:29
0
游客
登录 | 注册 方可回帖
返回
//