我想從Delphi XE 32位應用程序中調用一個簡單的Matlab例程,該應用程序已使用Matlab 2012b編譯器編譯爲名爲Test.dll的共享C庫文件。 該程序增加一個數字並返回新值。初始化matlab dll並從Delphi中調用inc函數XE
正如我從matlab文檔中所理解的,我首先需要調用mclInitializeApplication。 如下我已經映射了該DLL調用:
unit mclmcrWrapper;
interface
type
TAnsiArray = TArray<AnsiString>;
PAnsiArray = ^TAnsiArray;
function mclInitializeApplication(A: PAnsiArray; B: Integer): Boolean; cdecl; external 'mclmcr.dll' name '_mclInitializeApplication';
// Also tried, with same result:
// All attempts made with and without underscore give the same results.
// function mclInitializeApplication(A: PAnsiArray; B: Integer): Boolean; cdecl; external 'mclmcr.dll' name '_mclInitializeApplication';
// function mclInitializeApplication(A: THandle; B: Integer): Boolean; cdecl; external 'mclmcr.dll' name '_mclInitializeApplication';
implementation
initialization
mclInitializeApplication(nil, 0); //Initialize the matlab runtime
end.
根據ddlDepends功能是存在於DLL。 當我執行我的計劃,我得到了以下錯誤消息:
---------------------------
MatlabTest.exe - Entry Point Not Found
---------------------------
The procedure entry point _mclInitializeApplication could not be located in the dynamic link library mclmcr.dll.
---------------------------
OK
---------------------------
所有的DLL都存在於同一個文件夾。如果他們不是,我得到一個錯誤,該DLL本身無法找到。 這本身也很奇怪,因爲Matlab編譯的運行時安裝在我的系統上,並且它正確添加到Windows路徑中。
誰能告訴我我做錯了什麼? 在此先感謝。
您確定函數名稱中的下劃線?例如在['這個答案'](http://www.mathworks.com/matlabcentral/answers/99056-how-do-i-use-the-mclinitializeapplication-function-to-make-ac-shared-library-那個 - 不 - 使用 - )它的名字中沒有下劃線。這是來自供應商支持團隊最近的帖子。 – TLama
其實,不,我不確定,雖然經常需要下劃線。我也嘗試沒有下劃線,這給了我相同的結果。我在帖子中更新了這一點。 – deColaman
某些名稱裝飾方案包含下劃線。在這種情況下,依賴告訴你沒有下劃線。所以不要包含它。然後,當您這樣做時,系統會告訴您* mclInitializeApplication不能位於動態鏈接庫mclmcr.dll *中。那麼,相信這個系統。它是正確的。該DLL中沒有這樣的函數。它在不同的DLL中。 –