3792|15

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc编写的WCE Application程序中为何不能LoadLibrary [复制链接]

我用evc写了一个WCE Application程序,在WinMain函数中调用LoadLibrary函数动态加载一个DLL,debug的时候LoadLibrary返回NULL,被调用的DLL存在,而且输出API都正常,因为在WCE MFC AppWizard程序中被成功调用。
不知道LoadLibrary在WCE Application中的使用是否有啥讲究。

最新回复

wince没有相对路径的概念,LZ可以使用绝对路径试试: HINSTANCE hInstance = LoadLibrary( _T("NandFlash\\USER\\ECMS\\RUN\\eCMSAlarmServer.dll") ); 或者使用GetModuleFileName API来计算出当前应用程序的路径,然后wcscat(path,eCMSAlarmServer.dll);   详情 回复 发表于 2009-6-3 10:37
点赞 关注

回复
举报

9

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是否跟平台有关.
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
实在不行,把这个dll加到你的工程文件夹中试试
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
可能是路径指定错误
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
你说的情况可能是release版感觉OK, debug版感觉稍有问题.

release版会忽略一些错误(不知这样说合不合适), debug版不会.

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
L""
多半是路径没有加L
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

7
 
顶一下。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
DLL 存在么?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

9
 
感觉2楼正解,是你的路径问题。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
6楼有理,这个问题很容易忽视。
LZ把代码贴出来看一下
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
是否使用静态库模式?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
int WINAPI WinMain(        HINSTANCE hInstance,
                                        HINSTANCE hPrevInstance,
                                        LPTSTR    lpCmdLine,
                                        int       nCmdShow )
{
        // TODO: Place code here.
        HWND hwnd;
        if (hwnd = FindWindow(NULL, L"eCMSNK"))
        {
                SetFocus(hwnd);
                return (TRUE);
        }

        g_hInstance = hInstance;        //Save instance handle in global

        InitCommonControls();

        HINSTANCE        hInstance = LoadLibrary( _T("\\USER\\ECMS\\RUN\\eCMSAlarmServer.dll") );
        if ( hInstance==NULL )
                return FALSE;

        hwnd = CreateDialog( g_hInstance, MAKEINTRESOURCE(IDD_DIALOG_ECMSNK), NULL, MainDlgProc );
        if ( hwnd==NULL )
                return 1;

        while ( !g_bStop )
        {
                Sleep(100);
        }

        return 0;
}


贴出代码如上所示,LoadLibrary返回NULL,但是这个DLL和exe存放在同一个目录下。

我如果在evc工程的Project->Setting中将这个DLL的.LIB文件加进来,就可以正常LoadLibrary了。
很奇怪,因为正常情况下,LoadLibrary是不需要.LIB文件的,为什么这里需要引用了.LIB文件才能正常LoadLibrary?
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

13
 
你直接用LoadLibrary( _T("eCMSAlarmServer.dll") );这个试试,不要指定路径,系统默认会在当前目录和windows目录查找
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
在wince中还有一个API是:
HMODULE LoadLibraryEx(
  LPCTSTR lpLibFileName,
  HANDLE hFile,
  DWORD dwFlags
);
你也可以试试
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

15
 
看样子应该是一个静态库,而不是DLL
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

16
 
wince没有相对路径的概念,LZ可以使用绝对路径试试:
HINSTANCE hInstance = LoadLibrary( _T("NandFlash\\USER\\ECMS\\RUN\\eCMSAlarmServer.dll") );

或者使用GetModuleFileName API来计算出当前应用程序的路径,然后wcscat(path,eCMSAlarmServer.dll);
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表