現在、DLL間の変数のグローバル化に関する技術的な問題にぶち当たっており、「キャプチャソフト開発 その4 グローバルフックを使ってみる」の執筆が進んでおりません。
DLLが異なるEXEから呼ばれた場合でも、それぞれのDLL実体が同じ変数の値を共有できるようにする実装をしたのですが、リンクの段階でつまずいています。
以下はソースファイルに含まれる".shared"領域に変数を置くための記述です
- #pragma data_seg(".shared")
- static int count = 0;
- #pragma data_seg()
そして、.defファイル
- SECTIONS
- .shared READ WRITE SHARED
これでcountは読み書き共有ができる".shared"セグメントに配置されるはずなのですが、どうもリンカエラー「LINK : warning LNK4039: section '.shared' specified with /SECTION option does not exist」が出ていることから、セグメント自体が確保されていないようです。
エディタでオブジェクトファイルとスタティックリンクライブラリライブラリを覗きました。
オブジェクトファイルには".shared"の文字列があり、スタティックリンクライブラリには含まれませんでした。
なので、単純にスタティックリンクライブラリを用いた暗黙的なDLLのロードではだめなのかなぁと考えています※
オブジェクトファイルには".shared"の文字列があり、スタティックリンクライブラリには含まれませんでした。
なので、単純にスタティックリンクライブラリを用いた暗黙的なDLLのロードではだめなのかなぁと考えています※
また、直接的に問題とは関係ないですが、EXEのメモリセグメントについてコードは書けても中身が良く分からないので、勉強しないといけないなと思っています。
原因の特定と、EXEの構造について勉強してから、記事を書きたいと考えています。
したがって、「キャプチャソフト開発 その4 グローバルフックを使ってみる」の執筆は遅れます。
以上、連絡でした。
==================================
※
IDEでは自動的に設定をしてくれるのかな?
ネット上の参考にしたページではほとんどがVisual Studioのプロジェクトを用いていたので、設定が隠れてしまって分からないのだ。
全部ターミナルから開発する方法を私は取っている。
その方が、すべて自分で設定まで記述しなければならない分、理解が深まるからだ。
こういった問題にぶち当たること自体が、筋トレのチャンスなのかな?
あまりハマりすぎないで、多角的に問題を見ないとな。
プロジェクトエクスプローラを使って自動生成されるMakefileを覗くとかね。
==================================
※
IDEでは自動的に設定をしてくれるのかな?
ネット上の参考にしたページではほとんどがVisual Studioのプロジェクトを用いていたので、設定が隠れてしまって分からないのだ。
全部ターミナルから開発する方法を私は取っている。
その方が、すべて自分で設定まで記述しなければならない分、理解が深まるからだ。
こういった問題にぶち当たること自体が、筋トレのチャンスなのかな?
あまりハマりすぎないで、多角的に問題を見ないとな。
プロジェクトエクスプローラを使って自動生成されるMakefileを覗くとかね。
0 件のコメント:
コメントを投稿
コメント表示は承認制に設定しています