中易网

dll加载不成功

答案:2  悬赏:20  
解决时间 2021-11-08 15:34
  • 提问者网友:暖心后
  • 2021-11-08 01:52
假如我的dll名字是mydll,我的应用程序启动时会加载它。

我的问题在void WINAPIV Init(LPVOID pParam)函数定义里。

//函数声明
void WINAPIV Init(LPVOID pParam);
////////////////////////////////////////////////////////////////////////////////////////////////

void WINAPIV Init(LPVOID pParam)
{
//在这里添加DLL加载代码
问题:这里是什么意思?这里要加载什么dll代码? 是加载我的dll :mydll吗?
这样加载LoadLibrary("mydll.dll"); 这里是不是要让应用程序启动时加载成功,所以要这样?
return;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
if(Load())
{

_beginthread(Init,NULL,NULL);//开新线程执行上面函数
}
else
return FALSE;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
Free();
}
return TRUE;
}
最佳答案
  • 二级知识专家网友:转身后的回眸
  • 2021-11-08 03:24
先说下加载动态库吧,A.exe如果要加载A.dll,那么有几种方法,我们普遍采用静态加载和动态加载两种方法,这两种方法在编写和编译A.exe是需要在A.exe的代码中添加相应的代码和连接选项。具体参考《windows核心编程》第19章和第20章,很简单的,去看下吧,10分钟就会了;

再说你的那个Init函数,你的这个函数是一个线程的执行过程;这个线程时你在动态库被加载时启动的;也就是说当你的某个exe程序成功加载了你的mydll后,就会创建这个线程,这个线程调用Init函数。这个函数具体要做什么,完成什么功能,那要看你自己的设计;但是这与动态库能否被成功加载无关;就算你不创建线程,mydll依然可以被某个exe程序加载。
全部回答
  • 1楼网友:一池湖水
  • 2021-11-08 03:43
检查运行的环境变量、执行权限
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息