关于串口通讯的dll,使用SPCOMM.100分(100分)

  • 主题发起人 主题发起人 Langrenxilin
  • 开始时间 开始时间
L

Langrenxilin

Unregistered / Unconfirmed
GUEST, unregistred user!
一个串口通讯的dll,使用SPCOMM控件,打开串口没问题,发送数据时总是不行,哪位指点一下,
源代码:
DLL:
library Project1;
uses
ShareMem,
SysUtils,
Classes,
Windows,
Messages,
spcomm;

{$R *.RES}
var
comm:tcomm;
sbuf,rbuf:array[1..10] of byte;

function opencom(comno:integer):boolean;stdcall;
var
commname:string;
i:integer;
begin
comm := tcomm.create(nil);
result:=false;
commname := 'COM'+inttostr(comno);
comm.CommName := commname;
if comm.handle = 0 then
comm.StartComm;
result:=true;
end;

function send(n:integer):boolean;
begin
sbuf[1]:=byte($00+n);
if not comm.writecommdata(@sbuf[1],1) then
result:=false
else
result:=true;
end;
exports
opencom index 1,
send index 2;
begin
end.

主程序:
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
function opencom(comno:integer):boolean;stdcall;external 'E:/like/串口/new dllspcom/project1.dll';
function send(n:integer):boolean;stdcall;external 'E:/like/串口/new dllspcom/project1.dll';

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
if opencom(1) then
label1.caption:='open com1';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
num:integer;
begin
num:=strtoint(edit1.text);
if send(num) then
label1.caption:='send';
end;

end.
 
如查不用dll,你这两个函数可以发送成功吗?
 
刚才试了一下,没问题
 
忘了说,是在delphi5环境下
 
那也许是这个地方的问题,你给它的句样柄赋空值?
comm := tcomm.create(nil);
你试着用当前调用程序的句柄来传入动态库里替换这个nil看看,能不能解决问题?
 
不太明白啊,能给我具体说下怎样改吗?谢谢你啦
 
我现在其实就是想在主程序中能够设置发送的数据,哪位有其他方法说说看,不胜感激。
 
推荐使用moxa的pcomm
 
function send(n:integer):boolean;
后面加个stdcall
 
解决了,谢谢lzmling,app2001,wyddr.
 
你有看过delphi5开发人员指南里面有一篇关于调用dll里的窗体的介绍,就用到了传递调用程序句柄的,它上面是这样用的,在dll里的代码如下
function ShowCalendar(AHandle: THandle; ACaption: String): TDateTime;
var
DLLForm: TDllForm;
begin
// Copy application handle to DLL's TApplication object
Application.Handle := AHandle;
DLLForm := TDLLForm.Create(Application);
.....
end;

然后在调用窗体里它就如下调用:
ShowCalendar(Application.Handle, Caption)
你试一下看看
 
哦,下午没上网,没发现你已结帖了。
 

Similar threads

I
回复
0
查看
628
import
I
I
回复
0
查看
625
import
I
I
回复
0
查看
770
import
I
I
回复
0
查看
532
import
I
后退
顶部