这里的基本问题是二进制互操作不匹配之一。 简单地说,指向数组的指针在二进制级别与Delphi开放数组参数不同。 虽然它们在语义上都表示数组,但二进制表示不同。

C函数声明如下:

__declspec(dllexport) int ss_scaling_subtraction(

double* time,

double** signals,

double* amplitudes,

int nSamples,

int nChannels,

double* intensities

);

在Delphi中声明你的函数:

function ss_scaling_subtraction(

time: PDouble;

signals: PPDouble;

amplitudes: PDouble;

nSamples: Integer;

nChannels: Integer;

intensities: PDouble

): Integer; cdecl; external 'StirScanDLL.dll';

如果您发现未声明PPDouble ,请按以下方式对其进行定义:

type

PPDouble = ^PDouble;

也就是指针指向double的指针。

现在剩下的就是调用这些函数。 在Delphi中将您的数组声明为动态数组。 像这样:

var

time, amplitudes, intensities: TArray;

signals: TArray>;

如果你有一个较旧的pre-generics Delphi,那么声明一些类型:

type

TDoubleArray = array of Double;

T2DDoubleArray = array of TDoubleArray;

然后使用适当的类型声明变量。

接下来,您需要分配数组,并填充从调用者传递给被调用者的任何数据。

SetLength(time, nSamples); // I'm guessing here as to the length

SetLength(signals, nSamples, nChannels); // again, guessing

最后是时候调用这个函数了。 现在事实证明,Delphi的优秀设计师安排将动态数组存储为第一个元素的指针。 这意味着它们不会被用作参数。

retval := ss_scaling_subtraction(

PDouble(time),

PPDouble(signals),

PDouble(amplitudes),

nSamples,

nChannels,

PDouble(intensities)

);

请注意,此处显示的动态数组的强制转换依赖于实现细节。 因此,有些人可能认为最好使用,例如@time[0] ,等等一维数组。 并为幅度创建一个PDouble数组并复制内部数组的第一个元素的地址。 就个人而言,我很依赖这个实现细节。 它确实使编码更加简单。

最后一条建议。 Interop可能很棘手。 这很容易出错。 当你弄错了,代码编译,但在运行时死亡可怕。 带有神秘的错误消息。 导致头部刮伤。

所以,从最简单的接口开始。 接收标量参数的函数。 比如说,接收一个整数,并返回一个整数。 证明你可以做到这一点。 然后转到浮点标量。 然后是一维数组。 最后是二维数组。 沿途的每一步,都会增加复杂性。 当您遇到问题时,您会知道它已归结为最近添加的参数。

你没有采取这种方法。 你已经直接杀死并在你的第一次尝试中实现了一切。 当它失败时,你不知道在哪里看。 将问题分解成小块,并从那些较小的块中构建更复杂的问题。

.dta matlab,matlab - 使用带有C DLL的delphi dta类型的问题 - 堆栈内存溢出相关推荐

  1. java游戏怎么导入jme3,java - JME:将带有纹理的Cinema 4d模型导入jMonkey Projekt - 堆栈内存溢出...

    我的问题是: 现在,我想将其导出到我的jMonkeyEngine中,以将其设置在场景中并对其进行动画处理. 我试图将模型导出为.obj文件并将其加载到我的项目中(只是.obj文件). 结果是我没有纹理 ...

  2. 类型初始值设定项引发异常. matlab,c# - “ MathWorks.MATLAB.NET.Utility.MWMCR”的类型初始值设定项引发了异常 - 堆栈内存溢出...

    " MathWorks.MATLAB.NET.Utility.MWMCR"的类型初始值设定项引发了异常: 我从c#调用,这是MatLab库编译器编译的DLL中的函数. using ...

  3. matlab输出pdf图片超出边框,matlab - 将Matlab Simulink模型保存为PDF,带有紧密的边界框 - 堆栈内存溢出...

    给定Simulink框图(模型),我想生成稍后在LaTeX文档中使用的"屏幕截图". 我希望这个截图是PDF(矢量图形, - > pdflatex),带有一个紧密的边界框,我 ...

  4. matlab多变量优化,matlab - Matlab使用fminsearch优化多变量 - 堆栈内存溢出

    我正在使用Matlab fminsearch来最小化带有两个变量的方程sum((interval-5).^2, 2)*factor间隔是一个包含5个值的向量. 只能从1到30的步长为1的顺序选择它们. ...

  5. matlab 空间方程,matlab - 如何从MNA方程组到MATLAB中的状态空间[A,B,C,D] mimo? - 堆栈内存溢出...

    我想以编程方式从生成的MNA(修正的节点分析)方程组生成状态空间[ABCD]系统. 我不知道要调用哪个MATLAB函数. 我使用Erik Cheever的SCAM 链接脚本生成方程组. 我制作了文件e ...

  6. matlab对AMD显卡的支持,matlab - 深入学习Matlab与AMD显卡 - 堆栈内存溢出

    我怎么能在我的电脑上运行这个例子 ? 我没有Nvidia显卡所以我不能在Matlab中使用Cuda. 我需要用Matlab来完成它,因为我的代码的一半是用Matlab编写的,所有变量都是Matlab格 ...

  7. matlab编译错误怎么查找,matlab - Matlab mex文件编译错误-“未启用SSE2指令集” - 堆栈内存溢出...

    在Matlab中编译mex文件的工具箱时,出现以下错误: In file included from /home/josh/Desktop/Project/code/toolbox/channels/ ...

  8. matlab读取格式重复,matlab - 为什么Xlsread以字符串形式读取(日期时间) - 堆栈内存溢出...

    我正在尝试阅读Excel工作表. 在同一台计算机上,我得到不同的结果. 我应该怎么做才能将日期时间读为日期而不是字符串? 我知道以后可以更改它,但是我需要为Octave和Matlab使用相同的代码. ...

  9. c 传图片数据给matlab,c++ - 如何通过UDP将数据从C ++应用程序发送到Matlab并进行绘制 - 堆栈内存溢出...

    我想使用Winsock通过UDP将数据从我的C ++应用程序发送到Matlab,并实时绘制数字. 例如:我得到了从1到10的数字,我想从C ++发送1,在Matlab中接收它,将其放在图形上(图,条等 ...

最新文章

  1. Ubuntu 11.04 Unity最常用的31个快捷键
  2. JavaScript学习 九、事件
  3. C++走向远洋——26(项目二,2,构造函数与析构函数)
  4. matlab遗传算法m文件,matlab上安装遗传算法工具箱
  5. intellij idea 显示打开文件路径按钮
  6. 纯css制作带三角(兼容所有浏览器)
  7. Linux 文件目录特殊权限设定(SUID,SGID,SBIT)
  8. 纽约佩斯大学孔子学院:中国故事
  9. pip更新后怎么还是旧版本_双城SEO优化_百度算法更新后,企业网站外链该怎么发?...
  10. win10专业版系统没有休眠选项如何解决?
  11. 10Gb以太网——数据中心的未来
  12. Mysql5.7及以上版本的MySQL下载、安装及配置教程(附图)
  13. sharding技术
  14. 备战软考信息安全工程师经验
  15. sql server2008密钥
  16. 差分进化算法(python实现
  17. VB操作excel 格式设置及打印页面设置(精简)
  18. 城市三级联动带城市数据
  19. Video.js的简单使用介绍
  20. asp.net实现识别客户端浏览器或操作系统

热门文章

  1. Sw Solidworks渐开线绘制方法公式
  2. AB上的脚本引用丢失,The referenced script is missing!
  3. python上位机开发经验总结01
  4. 陶哲轩实分析公理8.1——选择公理
  5. 代码随想录训练营day49
  6. android和MTKP60区别,mtkp60相当于骁龙多少
  7. 如何用Eclipse编写第一个Java应用程序
  8. 【工具】MATLAB一键转为python
  9. DHCP欺骗和解决方案
  10. 四川大学20年计算机考研情况