高分请教高手,dll替换问题,急!

badcoldlj 2005-12-19 11:02:18
有一个程序,pb写的,她调用了一个dll文件里的两个函数,a()和b().
现在我对a,b两个函数的返回值和参数都知道了,但是不知道这个dll使用什么写的。

我的问题是,我想自己用vc写一个同名的dll,里边也输入两个同样的名称和参数的函数a和b,但是函数的具体实现是我自己的代码,完成不同的工作。然后用我的这个dll来代替原来的dll,可行吗?

还有一个问题,我编译xxx.dll文件时,总是提示我没有关联到xxx.def得编译程序,这是怎么回事?
...全文
165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mythay 2005-12-19
  • 打赏
  • 举报
回复
一般说来不行的,不过你可以查看原来dll中那个函数的导出顺序,新的dll文件在def文件中定义相同的序号。
另外还要注意名称的问题,因为别人的dll使用的编译器未知,你最好察看一下函数名字,看他是否对名字作了改变,如果改变的话就很麻烦。
不过,最好还是使用LoadLibrary进行动态加载。
wangk 2005-12-19
  • 打赏
  • 举报
回复
//调用函数:int myPuts(LPTSTR)
typedef int (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// Get a handle to the DLL module.

hinstLib = LoadLibrary(TEXT("myputs"));

// If the handle is valid, try to get the function address.

if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myPuts"));

// If the function address is valid, call the function.

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (TEXT("Message via DLL function\n"));
}

// Free the DLL module.

fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.

if (! fRunTimeLinkSuccess)
printf("Message via alternative method\n");
}
gohappy_1999 2005-12-19
  • 打赏
  • 举报
回复
可以,只是导出API的话没有问题的。
rageliu 2005-12-19
  • 打赏
  • 举报
回复
1. 然后用我的这个dll来代替原来的dll,可行吗?

完全可以,只要你dll名字和导出函数和原来那个dll相同,在你的dll里面还可以调用原来那个dll的函数,不过不要将原来的dll放在程序目录或系统目录或vc的配置目录里,你用原来的dll也用绝对路径形式

2. 还有一个问题,我编译xxx.dll文件时,总是提示我没有关联到xxx.def得编译程序,这是怎么回事?

xxx.def是用来说明导出函数,共享数据段等的,找写dll的资料好好看看

oyljerry 2005-12-19
  • 打赏
  • 举报
回复
自己实现一个dll,然后替换,然后调用,
那以前那个呢? not use?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧