C++Builder指针参数转换为delphi指针参数
来源:互联网 发布:啥软件可以看余罪 编辑:程序博客网 时间:2024/05/16 08:56
在BCB中,一DLL定义如下:
//波形参数
typedef struct
{
unsigned int mDots; //波形点数
double mDacclk; //时钟
double mWaveData[2*262144]; //波形数据
double mNoise[2*262144];
double mGenWave[2*262144];
}WavePara;
//计算规则波形的波形数据:如时钟,波形点数
void __stdcall LAI300_CacuWavePara(
int WaveType,
int xCycles,
int yCycles,
double Frequency,
double Amplitude,
double Offset,
double Duty,
unsigned int *mDots,
double *mDacclk,
double *mWaveData,
double kr,
double kf,
double phase
);
其调用:
WavePara CH[1]; // 卡波形参数
//计算规则波形的波形数据
LAI300_CacuWavePara(
mType, //波类型
mNumber, //个数
0,
mFreq, //频率
mAmplitude, //幅度
mOffset, //偏移
mDuty, //占空比
&CH[0].mDots, //波形点数
&CH[0].mDacclk, //时钟
CH[0].mWaveData, //波形数据
mKr/100, //上升时间
mKf/100, //下降时间
mPhase //相位
);
在Delphi中定义如下:刚开始定义成下列样子始终通不过,连Application.Initialize都通不过,更不用说去看堆栈哪里出错了,又没查到BCB指针
参数在Delphi中的定义方法,
//计算规则波形的波形数据:如时钟,波形点数
procedure LAI300_CacuWavePara(
WaveType:integer;
xCycles:integer;
yCycles:integer;
Frequency:double;
Amplitude:double;
Offset:double;
Duty:double;
mDots:PLongWord;
mDacclk:PDouble;
mWaveData:array of double;
kr:Double;
kf:Double;
phase:Double
)stdcall
在人家的Blog 中看到这样的讨论:
vc,dll中的函数原型为int f1(int ch, BYTE* aa),在vb中怎样声明,如何调用
declare function f1 lib "vc.dll" (byval ch as long,byref aa as byte) as long
sub main()dim n as byte
dim lRet as long
lRet = f1(1, n)
end sub
而VB中byref aa as byte转换为delphi中就是var aa:byte,也就是说vc中定义的double *mWaveData,其实用var mWaveData:double
就行,很少见到用mWaveData:PDouble这样的定义,但如果要传一个数组的首地址进去,用PDouble这种方法很方便,通过下面的程序证明我这
个推断是正确的.
定义:
//波形参数
type
WavePara=record
mDots:LongWord; //波形点数
mDacclk:Double; //时钟
mWaveData:array [0..2*262144-1]of double; //波形数据
mNoise:array[0..2*262144-1]of double;
mGenWave:array[0..2*262144-1]of double;
end;
procedure LAI300_CacuWavePara(
WaveType:integer;
xCycles:integer;
yCycles:integer;
Frequency:double;
Amplitude:double;
Offset:double;
Duty:double;
var mDots:LongWord;
var mDacclk:Double;
mWaveData:PDouble;
kr:Double;
kf:Double;
phase:Double
)stdcall;
调用:
var
CH:array[0..1]of WavePara;
//计算规则波形的波形数据
LAI300_CacuWavePara(
mType, //波类型
mNumber, //个数
0,
mFreq, //频率
mAmplitude, //幅度
mOffset, //偏移
mDuty, //占空比
CH[0].mDots, //波形点数
CH[0].mDacclk, //时钟
@CH[0].mWaveData, //波形数据
mKr/100, //上升时间
mKf/100, //下降时间
mPhase //相位
);
其参数中用var 就表示传变量地址
还有,在函数定义中,如果要求传数组首地址参数,最好是用Data:Pdouble指针形式,这样,不用但心堆栈溢出,否则,如果用动态数组做为参数,
如果定义的数组过大,传进去可能发生堆栈溢出,出现函数调用失败
- C++Builder指针参数转换为delphi指针参数
- delphi与C++Builder指针和数组转换
- 函数参数为指针
- 参数为函数指针
- C指针参数传递
- 数组作为函数参数 自动转换为同类型指针
- 函数参数为函数指针
- C++\C指针作为参数
- C指针笔记--函数中的参数指针
- c 数组和指针在函数参数中的转换
- C中的数组作函数参数被译为指针
- c 数组做为形参时 该参数退化为指针
- C语言指针作参数为非引用传递
- 在Delphi中使用指针参数
- C语言数组参数与指针参数
- C语言数组参数与指针参数
- C语言数组参数与指针参数
- C语言数组参数与指针参数
- 周报20100326
- twisted的学习资料【转】
- 周报20100404
- 妙用通配符证书发布多个安全Web站点:ISA2006系列之十五
- tapestry学习记录
- C++Builder指针参数转换为delphi指针参数
- 知识总监VS信息总监VS战略总监
- CKO的前世今生
- WinCE系统声音定制
- 周报2010100410
- bin/sh: hello :not found
- 开场白
- 我的FPGA学习历程
- 递归转非递归