ライブラリの動的ロードに問題があります。コードがKern-Exec3でパニックになります。コードは次のとおりです。
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に何か問題がありますか?これが何であるかです:
defファイル:
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でこの問題を発見しました。