F
fbyang
Unregistered / Unconfirmed
GUEST, unregistred user!
线程里原本有一个指向Record的指针,在调用Dll(动态装载)后,再使用原来的指针,就不能用了,报地址错啊!
继续补充:
调用函数是这样的:
dll函数声明:
type
TRuleCallDLL = function(MobileNum,SMSContentChar;HappenTime:double ): Integer;
PSMS = ^TSMS ;
TSMS = Record
MobileNum:AnsiString ;
SMSContent:AnsiString ;
HappenTime:double ;
end ;
线程主函数创建完指针对象后,给这个对象赋了值,然后调用CallDll
callDll('project1.dll','test',pSMS1^.MobileNum,pSMS1^.SMSContent,pSMS1^.Happentime) ;
当调用完毕后,我的pSMS1就再也不能用了。
CALLdll的实现是这样的:
function TXXXThread.CallDLL(dllName,funcName,MobileNum,
SMSContent: AnsiString;Happentime: TDatetime): Boolean;
var
dllhandle:THandle ;
proc:TFarProc ;
begin
Result := false ;
dllhandle:=Loadlibrary(PChar(dllName));
If dllhandle<32 then
Exit ;
proc := GetProcAddress(dllhandle,Pchar(funcName)) ;
try
TRuleCallDLL(proc)(PChar(MobileNum),PChar(SMSContent),Double(HappenTime)) ;
result := true ;
except
on e:Exceptiondo
;
end ;
FreeLibrary(dllhandle) ;
end;
不仅仅这个指针对象没有了,还有一些TList对象,好像内容也出错了,出现Index outof bound等错误。请大虾帮忙吧,我算晕菜了。
继续补充:
调用函数是这样的:
dll函数声明:
type
TRuleCallDLL = function(MobileNum,SMSContentChar;HappenTime:double ): Integer;
PSMS = ^TSMS ;
TSMS = Record
MobileNum:AnsiString ;
SMSContent:AnsiString ;
HappenTime:double ;
end ;
线程主函数创建完指针对象后,给这个对象赋了值,然后调用CallDll
callDll('project1.dll','test',pSMS1^.MobileNum,pSMS1^.SMSContent,pSMS1^.Happentime) ;
当调用完毕后,我的pSMS1就再也不能用了。
CALLdll的实现是这样的:
function TXXXThread.CallDLL(dllName,funcName,MobileNum,
SMSContent: AnsiString;Happentime: TDatetime): Boolean;
var
dllhandle:THandle ;
proc:TFarProc ;
begin
Result := false ;
dllhandle:=Loadlibrary(PChar(dllName));
If dllhandle<32 then
Exit ;
proc := GetProcAddress(dllhandle,Pchar(funcName)) ;
try
TRuleCallDLL(proc)(PChar(MobileNum),PChar(SMSContent),Double(HappenTime)) ;
result := true ;
except
on e:Exceptiondo
;
end ;
FreeLibrary(dllhandle) ;
end;
不仅仅这个指针对象没有了,还有一些TList对象,好像内容也出错了,出现Index outof bound等错误。请大虾帮忙吧,我算晕菜了。