再问:#define LoadLibrary LoadLibraryW 的使用

superwavelet 2013-03-12 01:54:53
windows 里面的 (vs2010)
HMODULE
WINAPI
LoadLibraryW(
__in LPCWSTR lpLibFileName
);
#ifdef UNICODE
#define LoadLibrary LoadLibraryW
#else
#define LoadLibrary LoadLibraryA
#endif // !UNICODE

然后别人的一个程序里面这样写:

void Plugin::loadPlugin(string pluginName)
{
int length = pluginName.length();
WCHAR *pluginFile = new WCHAR[length+1];
MultiByteToWideChar(0, 0, pluginName.c_str(), -1, pluginFile, length+1);

// load plugin into memory
pluginLibrary = LoadLibrary(pluginFile);


现在我知道pluginName 的值是: HiballPlugin

然后工程里面有个文件夹plugins,里面有HiballPlugin.dll 但是貌似pluginFile的值并没有dll。 还有,也没有指定plugins的相对路径,程序如何获得HiballPlugin.dll?

非常感谢。水平不行, 望多指教。
...全文
329 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
superwavelet 2013-03-12
  • 打赏
  • 举报
回复
ganpengjin1 可怜的猫哥 and mujiok2003 谢谢你们
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
引用 10 楼 ganpengjin1 的回复:
引用 8 楼 superwavelet 的回复: 引用 5 楼 ganpengjin1 的回复: 引用 4 楼 superwavelet 的回复:引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPl……
这个我说错了,这个我说成是查找头文件了。 你这样找吧:右击工程->Linker-》General->Additional Library Directories ,这个是你动态库引入的地址
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
引用 8 楼 superwavelet 的回复:
引用 5 楼 ganpengjin1 的回复: 引用 4 楼 superwavelet 的回复:引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面? 你……
再找不到,那就右击你的工程->C/C++->Additional Include Directories下看你的引入的头文件在哪个位置
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
引用 4 楼 superwavelet 的回复:
引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面?
1,首先那个.dll是不用写上去,默认扩展名是.DLL 2,你的工程根目录下必须有这个DLL,不然你的程序跑不动
引用 8 楼 superwavelet 的回复:
引用 5 楼 ganpengjin1 的回复: 引用 4 楼 superwavelet 的回复:引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面? 你……
你去你的Debug/Release版本下找找
superwavelet 2013-03-12
  • 打赏
  • 举报
回复
引用 5 楼 ganpengjin1 的回复:
引用 4 楼 superwavelet 的回复:引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面? 你的工程目录下去找一下这个……
HiballPlugin.dll的目录: F:\2013Springcourse\VR\osgve\plugins sln文件目录: F:\2013Springcourse\VR\osgve\examples\CaveTester\make\MSVC 100 貌似不在一个地方
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
引用 4 楼 superwavelet 的回复:
引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面?
那个DLL是可以不用写的,默认是DLL文件
mujiok2003 2013-03-12
  • 打赏
  • 举报
回复
1. rule for finding dll, see what msdn says, especially the mark section. 2. since path has been in wide chars, use the real function LoadLibaryW instead of the macro LoadLibary.
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
引用 4 楼 superwavelet 的回复:
引用 3 楼 ganpengjin1 的回复: 断点跟踪!! 跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面?
你的工程目录下去找一下这个库,它就在下面,不然你程序跑步起来。
superwavelet 2013-03-12
  • 打赏
  • 举报
回复
引用 3 楼 ganpengjin1 的回复:
断点跟踪!!
跟踪了,pluginFile的值是HiballPlugin,就是不知道HiballPlugin.dll 后面的dll是怎么出来的, 还有,没有指定路径如何知道HiballPlugin.dll是在plugins文件夹里面?
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
断点跟踪!!
superwavelet 2013-03-12
  • 打赏
  • 举报
回复
引用 1 楼 ganpengjin1 的回复:
string pluginName你自己看着,通过这参数传进来,MultiByteToWideChar(0, 0, pluginName.c_str(), -1, pluginFile, length+1); 通过这个API转换成了宽字符,LoadLibrary(pluginFile); 加载该DLL,等到该句柄!
HiballPlugin是有了,但dll这三个字符是如何加的?并且程序是如何找到plugins文件夹里面的HiballPlugin.dll?vs2010里面设置了plugins文件夹的路径吗?在哪儿设置的? 多谢啦
漫步者、 2013-03-12
  • 打赏
  • 举报
回复
string pluginName你自己看着,通过这参数传进来,MultiByteToWideChar(0, 0, pluginName.c_str(), -1, pluginFile, length+1); 通过这个API转换成了宽字符,LoadLibrary(pluginFile); 加载该DLL,等到该句柄!

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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