一種可能的方案是,"Matlab.exe"
被聲明mexPutVariable
作爲導出函數:
[Matlab.exe]
int __declspec(dllexport) mexPutVariable(const char* workspace, const char* name, const mxArray* parray)
{
...
}
它是那麼很容易使用GetModuleHandle
和GetProcAddress
中檢索從DLL這樣的功能:
[Module.dll]
// Declare function pointer
int (*FctnPtr)(const char* workspace, const char* name, const mxArray* parray);
// Retreive the main executable
HANDLE hExe = GetModuleHandle(NULL);
// Link to exported function in the exe just like you would do for any dll
FctnPtr mexPutVariable = (FctnPtr)GetProcAddress(hExe, "mexPutVariable");
// Use exported function from the dll
mexPutVariable("Base", "foo", myArray);
對於編譯mex文件並在查看mex.h
文件後,mexPutVariable
被聲明爲與外部函數鏈接:
LIBMWMEX_API_EXTERN_C int mexPutVariable(const char* workspace, const char* name, const mxArray* parray);
那一轉(當作爲DLL側編譯)是簡單的:
extern "C" int mexPutVariable(const char* workspace, const char* name, const mxArray* parray);
它是一個可能的答案還是一個真正的答案? –
我沒有matlab的源碼,所以它只能是一個猜測...無論如何不傳遞指針的DLL我看不到任何其他合理的解決方案回調主進程。 – CitizenInsane
作爲替代方案,也許在「.lib」中,你的mex源文件正在鏈接,還有一個導出的函數。爲了初始化'mexPutVariable'等(也就是在初始化時傳遞簡單的指針),matlab也在調用它。 – CitizenInsane