我在动态加载库时遇到问题 - 我的代码与 Kern-Exec 3 发生冲突。代码如下:
TFileName dllName = _L("mydll.dll");
TFileName dllPath = _L("c:\\sys\\bin\\");
RLibrary dll;
TInt res = dll.Load(dllName, dllPath); // Kern-Exec 3!
TLibraryFunction f = dll.Lookup(1);
if (f)
f();
我收到恐慌,TInt res = dll.Load(dllName, dllPath);
我该怎么做才能摆脱这种恐慌?mydll.dll 真的是我的 dll,它只有 1 个导出函数(用于测试目的)。也许DLL有问题?它是这样的:
定义文件:
EXPORTS
_ZN4Init4InitEv @ 1 NONAME
pkg 文件:
#{"mydll DLL"},(0xED3F400D),1,0,0
;Localised Vendor name
%{"Vendor-EN"}
;Unique Vendor name
:"Vendor"
"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\mydll.dll"-"!:\sys\bin\mydll.dll"
mmp 文件:
TARGET mydll.dll
TARGETTYPE dll
UID 0x1000008d 0xED3F400D
USERINCLUDE ..\inc
SYSTEMINCLUDE \epoc32\include
SOURCEPATH ..\src
SOURCE mydllDllMain.cpp
LIBRARY euser.lib
#ifdef ENABLE_ABIV2_MODE
DEBUGGABLE_UDEBONLY
#endif
EPOCALLOWDLLDATA
CAPABILITY CommDD LocalServices Location MultimediaDD NetworkControl NetworkServices PowerMgmt ProtServ ReadDeviceData ReadUserData SurroundingsDD SwEvent TrustedUI UserEnvironment WriteDeviceData WriteUserData
源代码:
// Exported Functions
namespace Init
{
EXPORT_C TInt Init()
{
// no implementation required
return 0;
}
}
头文件:
#ifndef __MYDLL_H__
#define __MYDLL_H__
// Include Files
namespace Init
{
IMPORT_C TInt Init();
}
#endif // __MYDLL_H__
我对此一无所知......非常感谢任何帮助。
PS我正在尝试做 RLibrary::Load 因为我在静态链接方面遇到了麻烦。当我进行静态链接时,我的主程序根本没有启动。我决定检查发生了什么,并发现 RLibrary::Load 存在这个问题。