LoadLibrary时无法加载,返回NULL,GetLastError=126

runapp123 2010-07-05 05:33:49
如题,各种dll已经放入debug文件夹中。
环境:winxp+vs2010

代码:

;TestDll.cpp

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <Windows.h>
#include "stdafx.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hfindmp3;
FARPROC fpplus;
int a,b,c;
char sfindmp3[32]="FindTheMp3.dll";

hfindmp3=LoadLibrary((LPCWSTR)sfindmp3);
if(!hfindmp3){
cout<<"Failed!"<<endl<<GetLastError()<<endl;
system("pause>nul");
return 0;
}
fpplus= GetProcAddress(hfindmp3,"plus");
do{
cin>>a>>b;
c=fpplus();
cout<<a<<'+'<<b<<'='<<c<<endl;
}while (getchar()!=27);
FreeLibrary(hfindmp3);
system("pause>nul");
return 0;
}




;FindTheMp3.cpp


#include "stdafx.h"


extern "C" int _declspec(dllexport)plus(int a,int b){
MessageBox(NULL,(LPCWSTR)"你正在调用plus函数!",(LPCWSTR)"调用成功",MB_OK);
MessageBox(NULL,(LPCWSTR)"It's so easy!",(LPCWSTR)"Hahaha......",MB_OK);
return a+b;
}

extern "C" int _declspec(dllexport)version(){
return 12345;
}



;dllmain.cpp

#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

...全文
2950 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jruinet 2010-08-06
  • 打赏
  • 举报
回复
同样出现这个问题,须要答按
runapp1234 2010-07-10
  • 打赏
  • 举报
回复
晕……自己发的贴无法编辑,还不能连发3贴以上,外加引用无法嵌套代码……
代LS通告:问题解决,已结帖
runapp123 2010-07-09
  • 打赏
  • 举报
回复
是不是因为#define Unicode就只能用Wchar了?
runapp123 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whycom 的回复:]

TCHAR sfindmp3[32]=_T("FindTheMp3.dll");

hfindmp3=LoadLibrary(sfindmp3);
[/Quote]

感谢!!!!可以了!!!
不知为甚啊?疑惑中……再看看
runapp123 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 adamwyb 的回复:]



char sfindmp3[32]="FindTheMp3.dll"; hfindmp3=LoadLibrary((LPCWSTR)sfindmp3);



这里的(LPCWSTR)不用加,你直接把"FindTheMp3.dll"放到LoadLibrary参数里看看。

[/Quote]

不行,

[Quote=引用 Virsual Studio 2010 的错误报告]
错误 1 error C2664: “LoadLibraryW”: 不能将参数 1 从“char [32]”转换为“LPCWSTR” e:\personal\my documents\visual studio 2010\projects\testdll\testdll\testdll.cpp 16 1 TestDll
2 IntelliSense: "char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容 e:\personal\my documents\visual studio 2010\projects\testdll\testdll\testdll.cpp 16 23 TestDll
[/Quote]

如上

[Quote=引用 7 楼 adamwyb 的回复:]

c=fpplus();


是不是应该改成

c=fpplus(a,b);



[/Quote]

嗯,那是之后的事了,现在都126,连Load都过不去。并且以前改过,不行。
adamwyb 2010-07-07
  • 打赏
  • 举报
回复

c=fpplus();

是不是应该改成

c=fpplus(a,b);

adamwyb 2010-07-07
  • 打赏
  • 举报
回复

char sfindmp3[32]="FindTheMp3.dll";
hfindmp3=LoadLibrary((LPCWSTR)sfindmp3);

这里的(LPCWSTR)不用加,你直接把"FindTheMp3.dll"放到LoadLibrary参数里看看。
whycom 2010-07-07
  • 打赏
  • 举报
回复
TCHAR sfindmp3[32]=_T("FindTheMp3.dll");

hfindmp3=LoadLibrary(sfindmp3);
adamwyb 2010-07-06
  • 打赏
  • 举报
回复
126的错误原因是找不到对应的模块。所以应该是你的DLL文件没有放到可执行文件目录下。如果调试的话,看一下调试的路径;如果直接执行EXE,就放在与EXE同一目录下就可以了。
Yanger_xy 2010-07-06
  • 打赏
  • 举报
回复
额...错了...不必添加.lib
Yanger_xy 2010-07-06
  • 打赏
  • 举报
回复
lz在好好看看文件的路径,然后再检查一下是否添加了.lib
runapp123 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 adamwyb 的回复:]

126的错误原因是找不到对应的模块。所以应该是你的DLL文件没有放到可执行文件目录下。如果调试的话,看一下调试的路径;如果直接执行EXE,就放在与EXE同一目录下就可以了。
[/Quote]

都没有啊?是放在一个目录了

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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