symbian: точка входа DLL для EKA2 или аналогичная? - PullRequest
0 голосов
/ 22 октября 2010

В настоящее время я разрабатываю DLL, которая предназначена для связи со сторонними приложениями, чтобы проверить, может ли это приложение запускаться в данный момент времени.

Сначала я подумал о создании DLLи обработайте необходимую проверку в функции TInt E32Dll().Но я был очень удивлен, когда прочитал, что эта функция не вызывается при загрузке / выгрузке DLL в EKA2.

Так что теперь мне нужен другой способ решения моей задачи.Моя цель - создать механизм, который можно будет встроить в сторонние приложения.Этот механизм должен вызываться при запуске приложения, выполнять некоторую проверку (наличие определенного сервера Symbian), и если проверка не удалась, он должен завершить работу приложения.Другое требование заключается в том, что этот механизм должен быть в лучшем случае прозрачным для разработчиков сторонних приложений.(Функция E32Dll () была лучшим кандидатом - просто свяжите конкретную библиотеку с проектом, и все готово ...)

Я буду очень признателен за любые другие идеи.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Я действительно нашел способ достичь своей цели - вызвать какой-нибудь метод при загрузке DLL.Идея была дана мне на http://developer.symbian.org/forum/showthread.php?p=30244.

Нужно просто объявить некоторый глобальный объект в некотором модуле DLL, и его конструктор будет вызван при загрузке DLL.Это решение прекрасно работает для меня, и, действительно, этот ответ действительно должен быть принят ...

... Но поскольку я не являюсь автором этого решения, и принятый в настоящее время ответ по-прежнему содержит ценную информацию,Я не буду менять знак принятия.Просто пусть будет так.:)

0 голосов
/ 23 октября 2010

Я не уверен, что делать что-то в E32Dll (), даже если это работает (но это не так, как вы выяснили), является хорошим способом, потому что перед закрытием приложения вы должны показать пользователю какое-то уведомление или диалог,Почему бы не создать нормальную DLL + тонкий стартовый код, который будет загружать (используя RLibrary) и вызывать 1-ую порядковую функцию:

RLibrary library;

//UID
TUidType uidType( TUid::Uid(KDynamicLibraryUidValue), 
                  TUid::Uid(KMyInterfaceUid), 
                  TUid::Uid(KMyImplementationUid) );

// Open dll 
User::LeaveIfError( library.Load( KMyDll, uidType ) );

// Check the exported method      
TLibraryFunction ordinal1 = aLibrary.Lookup( 1 );

// Call the method...
if ( ordinal1 )
    ordinal1();

library.Close();

BR STeN


Привет, Haspemulator, Вот мой ответ на твой комментарий:

1) Нет, 1-й порядковый номер не E32Dll () , этот метод не может быть вызван начиная с EKA2.Проверьте приведенное ниже описание (http://developer.symbian.org/wiki/Symbian_OS_Internals/10._The_Loader):

Обратите внимание, что в EKA2 точка входа публичной DLL E32Dll (TDllReason) больше не вызывается. Эта функция должна присутствовать в каждой DLL EKA1, чтобывызываться, когда DLL присоединена или отсоединена от процесса или потока. К сожалению, эта система точек входа не может обеспечить никаких гарантий того, что E32Dll () будет вызываться с соответствующим параметром в указанное время. Поскольку невозможно поддерживатьЭта функция надежно устраняет поддержку EKA2, что упрощает архитектуру на стороне ядра для управления динамически загружаемым кодом, что повышает надежность и надежность.

2) Вы можете найти интересное обсуждение по этой теме.также здесь: http://discussion.forum.nokia.com/forum/showthread.php?80781-What-is-the-replacement-for-E32Dll-and-TDllReason

3) В нашем случае первый порядковый номер будет первой функцией, которую вы экспортируете из DLL.Вы можете найти информацию о том, как написать такую ​​DLL здесь: http://developer.symbian.org/main/documentation/reference/s3/pdk/GUID-4A56B285-790E-5171-88F3-8C40B2AA9699.html

4) Чтобы быть более конкретным, что я имею в виду, экспортируя метод из DLL, проверьте код ниже (метод, конечно, может вернуть некоторую переменную -например, недавно созданный объект):

EXPORT_C void InitDll()
{
  // Put here your code 
}

Надеюсь, это поможет ... BR STEN


...