vb调用dll问题 ( 积分: 100 )

  • 主题发起人 主题发起人 jacko_930
  • 开始时间 开始时间
J

jacko_930

Unregistered / Unconfirmed
GUEST, unregistred user!
实在解决不了,才来这请大家帮忙看看。
我写了一个dll档,提供了几个函数,供vb程序调用,用来将文本文件中的内容上传到oracle数据库,采用的是三层结构的架构。传资料次数多了(大概在10次以上)就会出问题,提示“0x00000016"内存不能written.请问是什么问题?
是因为内存没有释放么? sos!
 
实在解决不了,才来这请大家帮忙看看。
我写了一个dll档,提供了几个函数,供vb程序调用,用来将文本文件中的内容上传到oracle数据库,采用的是三层结构的架构。传资料次数多了(大概在10次以上)就会出问题,提示“0x00000016"内存不能written.请问是什么问题?
是因为内存没有释放么? sos!
 
代码看看
 
不一定是内存没释放,把代码贴出来看看
 
function GetSubStr(var aString:String;
SepChar: String):String;stdcall;
var
MyStr: string;
SepCharPos: integer;
begin
SepCharPos:= Pos(Sepchar, aString);

MyStr:= Copy(aString, 1, SepCharpos-1);

Delete(aString, 1, SepCharPos);

GetSubStr:= MyStr;

end;

function GetSubStrNum(aString: string;
SepChar: string): integer;stdcall;
var
i: integer;
StrLen: integer;
Num: integer;
begin
StrLen:= Length(aString);
Num:= 0;
for i:=1 to StrLendo
if copy(aString, i, 1)= SepChar then
Num:= Num + 1;
GetSubStrNum:= Num;
end;

Function UpLoadData(A:THandle;sSN,sGROUP,sERFlag,sEMP:pchar):pchar;stdcall;
var
DataModule2: TDataModule1;
sSECTION, sMO, sMODEL, sLINE ,iMODATE, iWorkSection : string;
dtUpdateTime : TDateTime;
j: integer;
MyLine, sResult: string;
F : textfile;
begin
sResult:= '';
try
DataModule2:=TDataModule1.Create(nil);
try
if FileExists('c:/ATS.txt') then
begin
AssignFile(F, 'c:/ATS.txt');
try
Reset(F);
while not eof(F)do
begin
Readln(F, MyLine);
with DataModule2.cds_InsUNhrTestItemdo
begin

close;
for j:=1 to GetSubStrNum( MyLine, ',')do
params[j-1].AsString:= trim(GetSubStr(MyLine, ','));
execute;
end;
end;
CloseFile(F);
DeleteFile('c:/ATS.txt');
except
sResult:='Other Error';
end;

result:=AllocMem(Length(sResult)+1);
sResult:=sResult+#0;
StrCopy(Result,Pchar(trim(sResult)));
end else
Result:= pchar('No ATS File');
finally
DataModule2.Free;
end;
except
Result:=pchar('Other Error');
end;
end;

以上大家帮看看
 
还真有点VB的风格,哪个是导出函数,对其他语言最好不用string类型,一般是PChar
不过我的建议是,设置Run菜单的Run Parameters,设置Host Application为你的VB程序,然后就可以调试DLL了,这样就能比较容易找出问题了
 
exports UpLoadData,
 
让VB/VC等开发的程序调用的DLL,不要使用string类型的参数和返回值,用PChar。
 
先謝各位了.看來還要努力學習啊
 
問題找到了,是內存沒釋放的原因.
不過還有其它些問題.如連接超時等問題,不知該如何解決.也請各位大哥不吝賜教.
 
后退
顶部