【发布时间】:2018-11-28 04:01:32
【问题描述】:
几年来,我们一直在使用针对 MATLAB API(由 MATLAB Compiler Runtimes 7.11 和 7.15 支持)编写的 COM DLL 和 VB6 来编写 .mat 文件并将图形保存到 .png 文件。突然之间,.mat 文件中包含的变量名和字符串数据在它们的末端被无关字符弄乱了。似乎与我的电脑隔离。有没有人经历过这样的事情?
【问题讨论】:
标签: string matlab corruption
几年来,我们一直在使用针对 MATLAB API(由 MATLAB Compiler Runtimes 7.11 和 7.15 支持)编写的 COM DLL 和 VB6 来编写 .mat 文件并将图形保存到 .png 文件。突然之间,.mat 文件中包含的变量名和字符串数据在它们的末端被无关字符弄乱了。似乎与我的电脑隔离。有没有人经历过这样的事情?
【问题讨论】:
标签: string matlab corruption
通过一些试错和代码比较找到了解决方案。
以前在 c# 中工作的声明是:
internal static extern IntPtr mxCreateString_proxy([In]Char[] CharStr);
必须将声明更改为以下内容(以避免破坏字符串数据):
internal static extern IntPtr mxCreateString_proxy(String CharStr);
这个简单的灵魂是在多次尝试以各种方式元帅Char阵列失败后得出的。
作为背景,据我所知,Matlab 不会将 API 发布到他们的运行时。我不知道以前的开发人员是如何获得签名的。
也就是说,在另一个运行时函数 mclInitializeApplication_proxy 的单独声明中,我看到它的 Options 参数(一个字符串)作为字符串传递。
internal static extern Boolean mclInitializeApplication_proxy(String options, Int32 count);
所以,我决定如果该函数声明使用 String 来传递字符串数据,那么我不妨尝试将需要发送的字符串数据作为 String 而不是 Char[] 传递。瞧,它奏效了。
我只是想我会发布灵魂,以防其他人有类似的问题。
【讨论】: