Matlab and JDDE

試著忘記壹切 提交于 2019-12-01 12:23:30

问题


Update: The problem was solved with the help of MathWorks. I've published the answer below.

I need to control a program (Zemax) from Matlab. Unfortunately, Zemax only supports DDE for such control, which Matlab does not support any more. It works, but stops working on 64 bit platform after a few (presumable 63) DDE calls.

I wonder if there are working solutions. I could probably program a DLL with correct DDE support and then use DDE in Matlab via this DLL. This is a major effort for me. A more suitable solution would be to use Java DDE methods. Following another post here, I've discovered the JDDE library. However I cannot make it work: Even if I am in the directory with the DLL and JAR files, executing

import pretty-tools.JDDE-2.0.3.*

works fine but calling

a = com.pretty_tools.dde.client.DDEClientConversation()

afterwards (as done here) results in

Undefined variable "com" or class "com.pretty_tools.dde.client.DDEClientConversation".

I have very limited writing privileges on my PC, so I have added the javaclasspath.txt file with the jar/dll location to the directory indicated by prefdir. The file looks like this:

C:\Users\xxxxxxxx\Documents\matlab toolbox\jdde\pretty-tools-JDDE-2.0.3.jar

Calling javaclasspath shows a long listing with the last lines being:

...
C:\Program Files\MATLAB\R2012b\java\jarext\webservices\ws_client_core\mw-service-client-core.jar
C:\Users\kkarapet\Documents\matlab toolbox\jdde\pretty-tools-JDDE-2.0.3.jar                     

DYNAMIC JAVA PATH

<empty>

So path seems to be set correctly. What am I doing wrong?


回答1:


With the help of MathWorks support, I've found the answer. Here is how to make JDDE work with Matlab 2012b, without admin privileges:

  1. Download and unpack JDDE files (DLLs and JAR) into some folder. Let's say it's $path-to-jdde$\.
  2. In Matlab, type prefdir. Open the resulting directory and create two files there, javaclasspath.txt and javalibrarypath.txt.
  3. In javaclasspath.txt, add $path-to-jdde$\pretty-tools-JDDE-2.0.3.jar.
  4. In javalibrarypath.txt, add $path-to-jdde$\.
  5. Restart Matlab.

Now call ddeConv = com.pretty_tools.dde.client.DDEClientConversation; and start using the created object as described in JavaDoc. E.g. to connect to Zemax, run Zemax and then in call ddeConv.connect('Zemax', 'abc').

Step 2 above can only be done starting Matlab version R2012b. With an older version, if you have the write rights on the Matlab installation directory, you should be able to replace step 2 by editing the files librarypath.txt and classpath.txt in $MATLABROOT$\toolbox\local. I could not verify it so if you confirm it please let me know in the comment below.



来源:https://stackoverflow.com/questions/19403610/matlab-and-jdde

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!