0

私は、c++ と matlab を使用して他の誰かが開発したプログラムを使用しています。両方のソースコードを持っていますが、何が起こっているのかわかりません...

Matlab は、次のようなものを使用して、c++ から生成された dll を呼び出します。

myCustomCppFunction('param1', 'param2)

dll エクスポートでmyCustomCppFunctionが表示されることを期待していましたが、見つかりませんでした。

dumpbinコマンドを実行すると、次のようなメッセージが表示されます。

dumpbin /exports c:/myCustomCpp.dll
ordinal hint RVA      name
1    0 00001010 myCustomCppFunctionWithADifferentName

そう、

myCustomCppFunctionWithADifferentName != myCustomCppFunction

DLL は、私の matlab が呼び出している関数名とは異なる関数名をエクスポートしています。そして、私はマングルされた名前について話しているのではなく、「リンゴ」と「バナナ」のように、両方の名前が 100% 異なります。:-)

どういうわけか、すべてがうまくいきます!しかし、どのように?!?

Matlabでは、呼び出された関数が調査中のDLLからのものであることを確認するコマンドも実行しました....

>> which myCustomCppFunctionWithADifferentName
>> c:/myCustomCpp.dll

手がかりはありますか?

4

1 に答える 1

1

タグは別として、MEX ファイルを扱っているかどうかはわかりません。

MEX ファイル (DLL) の名前は、エクスポートされた関数の名前とは関係ありません。MEX ファイル内のエクスポートされた関数は次のとおりです。

mexFunction

Windows にはまだ がありますDLLMainが、MATLAB は を探しmexFunctionます。

これが起こることです:

>> myMEXFunction()  % looks for myMEXFunction.mexw64 (or whatever extension)

myMEXFunction.mexw64 がmexFunctionエクスポートされた場合、あなたは仕事をしています。

asで宣言されてmexFunctionいることに注意してください(.cpp をコンパイルしている場合)、ソースで定義するだけです。そのため、常に装飾されていません。mex.hextern "C"

ただし、myCustomCpp.dll は をエクスポートしないmexFunctionため、MEX ファイルについて話しているのではないでしょうか? また、MEX ファイルについて話している場合にさらに不確かなのは、 で得られる奇妙な結果ですwhich。MATLAB ソース ( myCustomCppFunction) は実際に DLL を使用しているloadlibrarycalllib、DLL で動作していますか? この方法で非 MEX DLL をロードした場合、表示myCustomCppFunction()されている内容は理にかなっています。

于 2015-07-20T22:08:50.387 に答える