我想在vc中创建一个dll,这个dll的输出函数满足,有输入参数、输出参数,
并且,输入、输出参数中都有数组,请问,我这个函数应该怎么样建立,
具体形式是什么?怎样在delphi调用
_declspec(dllexport) int testdll(double x,double a[100],double b[100],int &m);
其中,double x,double a[100]输入参数
double b[100],int &m 输出参数
这样可以吗?
并且,还有一个问题,在这里我定义的函数返回为int,值为1,怎么在delphi调用完以后,返回的是0?
急等,请赐教
并且,输入、输出参数中都有数组,请问,我这个函数应该怎么样建立,
具体形式是什么?怎样在delphi调用
_declspec(dllexport) int testdll(double x,double a[100],double b[100],int &m);
其中,double x,double a[100]输入参数
double b[100],int &m 输出参数
这样可以吗?
并且,还有一个问题,在这里我定义的函数返回为int,值为1,怎么在delphi调用完以后,返回的是0?
急等,请赐教
function testdll(x: double;a, b: array[1..100] of double;m: ^integer); external 'XXX.dll'name'testdll'
function testdll(x: double;a, b: array[1..100] of double;m: ^integer): integer; external 'XXX.dll'name'testdll'
type
TDoubleArray=[0..100-1] of Double;
PDoubleArray = ^TDoubleArray;function testdll(x: double; a, b: PDoubleArray; var m: Integer): Integer; stdcall;
external 'DLLNAME.DLL';
在VC中,我定义了输出函数形式为
int MyDllFn(int i,double a[100],double b[100],double aa[2])
在delphi中调用
var
a:array[0..99] of double;
b:array[0..99] of double;
aa:array[0..99] of double;
function MyDllFn(var i:integer;var a;var b;var aa):integer;stdcall;External 'mydll.dll';当运行的时候,出现读内存错误
access violation at 0x0000000:read of address 0x0000000请问如何解决
就是,数组的维数刚开始并不能确定,
而是动态的生成,vc中定义数组必须指定维数
有什么办法解决?
bytearray: array of byte;
然后记住在使用前setLength就行了
setlength(bytearray,x);
int MyDllFn(int i,double a[100],double b[100],double aa[2])
{
initM(MATCOM_VERSION);
Mm x,y,a1;
double *a_v=(double*) malloc(i*sizeof(double));
double *b_v=(double*) malloc(i*sizeof(double));
for(int k=0;k<i;k++)
{
a_v[k]=a[k];
b_v[k]=b[k];
}
x=rand(1,i);
y=rand(1,i);
memcpy(x.addr(),a_v,i*sizeof(double));
memcpy(y.addr(),b_v,i*sizeof(double));
a1=polyfit(x,y,1);
aa[0]=*a1.addr();
aa[1]=*a1.addr(2);
exitM();
return 1;
}其中的i是动态数组的维数,可是这样做总是出现出现读内存错误
access violation at 0x0000000:read of address 0x0000000请问有什么好的解决方法没有?