0

[参考までに: 私は答えを得て、解決策を書いているところです。この投稿は、同様の問題を抱えている他のユーザーの参照用です]


Symbian-Belle プラットフォームでいくつかの小さなアプリケーションに取り組んでいます。いくつかの JSON ファイルを解析しなければならない場所に到達するまで、すべてがうまくいっていました。非常に関連性が高く使いやすいように思われるQJsonライブラリを見つけました(ただし、すべてをQVariantMapとして返すようですが、これはおそらくそれほど軽量ではありません..)。

ただし、このライブラリはプリコンパイルされた形式では提供されません。ソースのみです。幸いなことに、QtCreator の Symbian プロジェクトでコンパイルする準備ができています。

いくつかの初期設定とマイナーな修正の後、すべてがシミュレーターでスムーズに実行されたので、次のステップは実際のデバイスで実行することでした。ここでいくつかの問題が始まりました。ビルド、リンク、デプロイ、およびインストールの後、IDE から次のように通知されました。

起動に失敗しました: コマンド応答 [コマンド エラー]、要求する 1 つの値: 'C|4|Processes|start|""|"MyApp.exe"|[""]|[]|true'
#0 {" Code":-46,Format="Failed to create the process (verify that the executable and all required DLLs has been transfered and that the process is not running)"}
エラー: 'Failed to create the process (実行可能ファイルと必要なすべての DLL が転送され、プロセスがまだ実行されていないことを確認してください) (許可が拒否されました) ' コード: -46

起動プロセスは即座に中止されました。もちろん、json 関連のコードとライブラリがまだプロジェクトに追加されていないときは、アプリケーションは適切に起動していました。

提案された内容を確認したところ、QJson ライブラリは実際にデバイスに適切にインストールされていたので、ファイルが見つからないということではありませんでした。また、アプリケーション自体も適切にインストールされています。手動で実行することもできました。それを行うと、エラーが発生しました:

セキュリティ上の理由でファイルを実行できません

何が起こっている?修正方法は?

4

1 に答える 1

1

問題は、Symbian プラットフォームのセキュリティ機能にあります。Qt とはまったく関係がないことが判明しました。

EXE プロジェクトと DLL プロジェクトの両方が、コードで使用される特別なプラットフォーム機能を指定する「機能」でマークされている場合があります。たとえば、デバイス固有のデータを読み取ろうとすると、ReadDeviceData機能が必要になります。

機能は、デバイスにインストールされているバイナリ ファイルに組み込まれています。Symbian ビルド システムでは、それらを .PKG ファイルで定義する必要がありますが、現在の Nokia/Qt ツールを使用すると、これらのファイルはすべてビルド プロセスによって自動生成されます。Qt プロジェクトの場合、機能は .pro ファイルで指定されます。次に例を示します。

TARGET.CAPABILITY += ReadDeviceData

ここで、トリックは、EXE と DLL がまったく同じ Capability フラグを使用している間、EXE と DLL の場合、同じ機能が別のものを意味することです

  • EXE の場合、「アプリケーションは何を使用できるか?」という意味です。
  • DLL の場合、「この DLL を安全に使用できるアプリケーションは?」という意味です。

最初に考えたときに違いを理解するのは非常に難しいです。

  • EXE にフラグ X がある場合、OS はこのアプリケーションに X API へのアクセスを許可します。
  • DLL にフラグ X がある場合、X フラグを持つアプリケーションで安全に使用できることを意味します。

DLL の場合、意味が多少逆になることに注意してください。たとえば、いくつかのハイパーセキュア フラグを使用するアプリケーションは、これらのフラグを持たないAllFiles DLL を使用できません。

理由は簡単です。XYZ フラグを使用し、DLL がこのフラグで安全に使用できるとマークされていない場合、その DLL を安全に使用できず、読み込むことができません。

これは、Nokia の Symbian ドキュメントにも書かれています:
http://www.developer.nokia.com/Community/Wiki/Shared_Library_DLLs_on_Qt_for_Symbian#Capabilities

これは、(アプリで使用される) すべての DLL が少なくともアプリと同じ幅の機能を持っていることを確認する必要があることを意味します。

QJson ライブラリに関する私の問題の解決策は、単にNetworkServicesQJson/src/src.pro ファイルに追加することでした。私のアプリケーションは、インターネットからデータをダウンロードしたため、このフラグを使用していました。したがって、ライブラリはネットワークで安全に使用できるものとしてマークする必要があります。そもそもなぜそのフラグが付けられなかったのか、私には理解できません。JSONパーサーがネットワーク対応アプリケーションで使用されることは明らかであるため、おそらく作成者は単に忘れていました..私は彼らにメモをドロップするつもりです.


これで、私が書きたかった問題解決事例を終わります。少し広い説明を含む長いバージョンをhttp://quetzalcoatl-pl.blogspot.com/2012/10/notes-on-symbian-qt-qjson-dlls-and.htmlに投稿しました。

于 2012-10-04T14:58:54.047 に答える