这是怎么回事?打开串口的问题!Unhandled exception in Project1.exe:0xC00000005 :Access Violation.

fangerhua 2005-12-14 02:12:02
VC中的DLL文件是这样的:
extern "C" __declspec(dllexport) int OpenPort(int i)
{
DWORD dwBaud = 9600;
unsigned short retval;
int iport;
iport = i;

retval = OpenPort(iport,dwBaud,0,&devNo);//已经封好的库的函数

if(retval==0x9000)
{
retval=SetTimeout(devNo,1000,0);
isOpen=true;
retval=0;
return retval;
}else
{
return retval;
}

}

delphi中这样调用的:
Function OpenPort(i:integer):integer;stdcall;External 'Test.dll'; //打开串口

procedure TForm1.Button2Click(Sender: TObject);
var
iCom:integer;
begin
if isOpen = true then
begin
Edit1.Text := 'OpenPort Opened!';
Exit;
end;
iCom := 1;
try
Ret := OpenPort(iCom,0);
except
end;
if Ret <> 0 then
Edit1.Text := 'OpenPort Error!'
else
begin
Edit1.Text := 'OpenPort Success!';
isOpen := true;
end;
end;

在delphi中只要过程执行完了就报:Unhandled exception in Project1.exe:0xC00000005 :Access Violation.错误,我看了又看,是在想不到哪里的内存地址有错了,大侠们救救啊!!
...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
clasj 2005-12-15
  • 打赏
  • 举报
回复
函数声明错了,将stdcall改为cdecl。
fangerhua 2005-12-15
  • 打赏
  • 举报
回复
TO clasj 太谢谢了!!
fangerhua 2005-12-14
  • 打赏
  • 举报
回复
是不是0表示第一个串口,1表示第二个串口?

可能参数指定的是一个不存在的串口?
----------------------------------------------
不是的,1就代表串口1。即使打开不存在的串口,也是报错!真是没辙了!
mastersky 2005-12-14
  • 打赏
  • 举报
回复
是不是0表示第一个串口,1表示第二个串口?

可能参数指定的是一个不存在的串口?
fangerhua 2005-12-14
  • 打赏
  • 举报
回复
dalphi里的 Ret := OpenPort(iCom,0); 应该是Ret := OpenPort(iCom);
fangerhua 2005-12-14
  • 打赏
  • 举报
回复
只要OpenPort(int i)函数的参数去掉了就没有事情了,真是很奇怪!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧