我写的DLL有一个参数是数组,我在DLL中需要动态的改变数组的大小,并且赋相应的数据.但错误就在这里,当我在DLL中给它赋值时,程序就出现错误!假如我不去赋值则一切正常!程序如下:{$R *.res}
function DivNum(strSql:string;var sRet : TArrUser):Integer;stdcall;
Var
i:integer;
begin //设置数组的大小长度
SetLength(sRet,7); //这里改变大小,是没有出错 //错误就在这里,我去改变了它的内容.
sRet[1].password:='password'; //但改变的数据我在调用DLL 的程序中也正确读取出来了,但当我调用FreeLibrary(H)时程序出错! Result:=100;end;exports
DivNum index 0;//////////////DLL END
TArrUser 是我定义的一个结构体数组//申明
TDivNum= function(strSql:string;var sRet : TArrUser):Integer; stdcall;procedure TForm1.BitBtn1Click(Sender: TObject);
var AppPath: string;
m_ArrUser :TArrUser; // 动态数组
H:TH;
DivNum:TDivNum;
begin
m_ArrUser:=nil;
SetLength(m_ArrUser,6);
....
H:=LoadLibrary(PChar(AppPath));
if H <> 0 then
begin
@DivNum := GetProcAddress(H,'DivNum'); if (@DivNum) <> nil then
begin
m_ArrUser[1].password:='passwr';
//调用DLL
DivNum('sdflkj',m_ArrUser); SGD3.Cells[0,0]:=m_ArrUser[1].userid;
SGD3.Cells[1,0]:=m_ArrUser[1].password; //能够正确显示出在DLL中改变的数据 FreeLibrary(H);//如果在DLL 中改变了m_ArrUser的内容则在此出错.
end;
end
else
MessageBox(0,'指定的动态链接库可能不存在');
end;//////////////////End Function出错内容:
project tt.ext raised exception class EAcessViolation with message 'Access violation at address 00404258 in module 'tt.ext' read of address 01b30b04' process ....各位大哥,帮忙看看,问题解决马上给分.
多谢!
function DivNum(strSql:string;var sRet : TArrUser):Integer;stdcall;
Var
i:integer;
begin //设置数组的大小长度
SetLength(sRet,7); //这里改变大小,是没有出错 //错误就在这里,我去改变了它的内容.
sRet[1].password:='password'; //但改变的数据我在调用DLL 的程序中也正确读取出来了,但当我调用FreeLibrary(H)时程序出错! Result:=100;end;exports
DivNum index 0;//////////////DLL END
TArrUser 是我定义的一个结构体数组//申明
TDivNum= function(strSql:string;var sRet : TArrUser):Integer; stdcall;procedure TForm1.BitBtn1Click(Sender: TObject);
var AppPath: string;
m_ArrUser :TArrUser; // 动态数组
H:TH;
DivNum:TDivNum;
begin
m_ArrUser:=nil;
SetLength(m_ArrUser,6);
....
H:=LoadLibrary(PChar(AppPath));
if H <> 0 then
begin
@DivNum := GetProcAddress(H,'DivNum'); if (@DivNum) <> nil then
begin
m_ArrUser[1].password:='passwr';
//调用DLL
DivNum('sdflkj',m_ArrUser); SGD3.Cells[0,0]:=m_ArrUser[1].userid;
SGD3.Cells[1,0]:=m_ArrUser[1].password; //能够正确显示出在DLL中改变的数据 FreeLibrary(H);//如果在DLL 中改变了m_ArrUser的内容则在此出错.
end;
end
else
MessageBox(0,'指定的动态链接库可能不存在');
end;//////////////////End Function出错内容:
project tt.ext raised exception class EAcessViolation with message 'Access violation at address 00404258 in module 'tt.ext' read of address 01b30b04' process ....各位大哥,帮忙看看,问题解决马上给分.
多谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货