プログラムを開発しましたが、このプログラムを他社製の制御可能な光源で動作させようとしています。会社にメールを送信したところ、外部ライブラリを DLL として送信することに同意してくれました。
Qt 4.8.1を使用してすべてのソフトウェアを開発し、MSVC2008を使用してコンパイルしました。
制御可能なライトの DLL は Visual Studio 2008 でコンパイルされ、C++ または C# で記述されています(メーカーは不明です)。私が与えられたのは、DLL と、私がしなければならないことを示すテキスト ファイルだけです。
- プロジェクトへの参照として DLL を追加する
using LightName;
クラスの先頭に 追加- オブジェクトのインスタンスを次のようにインスタンス化します。
LightName *ln = new LightName();
- 新しく作成された LightName インスタンスで関数 void turnOn() を呼び出します。
まず、特に単純なハードウェアの場合、外部ライブラリがオブジェクトのインスタンスをインスタンス化する必要があるのは奇妙だと思います。
第二に、他の会社は私にインターフェイス ファイルを提供していません。
私の質問は次のとおり です。Qt 環境でインターフェイス ヘッダー ファイルを使用せずに、C++ DLL にリンクし、このライブラリにネストされた関数を公開するにはどうすればよいですか? 外部ライブラリのインターフェイスを作成する方法はありますか?
私はすでにQLibraryを使用して次のことを試みました。
QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
myFunction();
ただし、与えられたDLLはC DLLではなく、インターフェースがないため、Qtは解決する必要があるシンボルについての手がかりがないため、これは機能しません。
dumpbin /EXPORTS コマンドを使用して、DLL からエクスポートされたすべての定義を表示しようとしました。残念ながら、これは何も生成できませんでした。私は、これから何らかの混乱した C++ を取得し、それを解読して独自のヘッダーを作成できることを望んでいました。
依存関係ウォーカー(非常に便利なツール)を使用しようとしましたが、シンボルを解決して関数定義を提供することができませんでした。