0

MATLAB エンジン アプリケーションに取り組んでいます。これを機能させるには、エンジン アプリケーションが特定の DLL (libeng および libmx) を検出できるように、MATLAB を PATH 環境変数に追加する必要があります。

MATLAB が COM サーバーとして登録されると、その場所がレジストリに書き込まれ、アクセスできるようになります。この情報を使用して、MATLAB を PATH に追加せずにエンジン アプリケーションを動作させる簡単な方法はありますか? エンジン アプリケーションは、理論的にはこれらの DLL の場所をレジストリから読み取ることができますが、問題は、(MATLAB エンジンのコンパイル手順に従って標準的な方法でコンパイルした場合) これらの DLL がないと起動すらできないことです。

私は winapi にあまり詳しくなく、COM にもまったく詳しくありません。

問題がレジストリからの情報に基づいて DLL を見つけられるようにする簡単な解決策はありますか?

4

1 に答える 1

2

次の解決策を見つけました。

遅延 DLL ロードを使用すると、プログラムが DLL をロードしようとする前に、DLL 検索パスを設定する機会が得られます。

これを行うには、リンカー オプションに次を追加する必要がありました: /DELAYLOAD:libmx.dll /DELAYLOAD:libeng.dllおよび に対してリンクする必要がありますdelayimp.lib。これを行った後、libmx.dll および libeng.dll の場所へのパスを使用してSetDllDirectory()への呼び出しをmain/WinMain 関数の先頭に追加できます。

于 2013-04-08T15:32:36.993 に答える