Delphi 动态调用Dll,释放时为什么总报错

procedureTForm1.Button2Click(Sender:TObject);typetfun=function(instr:PansiChar;outstr... procedure TForm1.Button2Click(Sender: TObject);
type
tfun = function(instr: PansiChar; outstr: PansiChar; len: Integer)
: Integer; stdcall;
var
dll: THandle;
DeviceQuaryCommand: tfun;
pinstr, poutstr: PansiChar;
begin
dll := LoadLibrary('RelayControlCtl.DLL');
try
if dll <> 0 then
begin
@DeviceQuaryCommand := GetProcAddress(dll, 'DeviceQuaryCommand');
if @DeviceQuaryCommand <> nil then
begin
pinstr := ('R1:ON');
poutstr := GetMemory(10);
ZeroMemory(poutstr, 10);
DeviceQuaryCommand(pinstr, poutstr, 10);
MemoOutput.Text := (poutstr);
freememory(poutstr);
end;
end;
finally
FreeLibrary(dll);//这里报错,不知道为什么
end;
end;
展开
 我来答
dodolon
2015-01-24 · TA获得超过7713个赞
知道大有可为答主
回答量:4477
采纳率:84%
帮助的人:2134万
展开全部
首先,if dll <> 0 then应该放到try的前面,其次,DLL可能用到了COM,如果是这样,就要用

begin
CoInitialize(nil);
try

finally
CoUninitialize;
end;
end;
来初始化COM运行环境和做运行环境的善后处理。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式