子陌老大,皱建大哥在不在?

samfeng_2003 2006-06-30 10:53:11
好久没有来了,打搅一下!:)
我在开发一个考勤机的接口程序!因为动态连接库是用dephi开发的,我不太想用dephi开发所以就用c#在写它的程序,但是现在遇到一个问题!

比如在动态库EastRiver的库里有两个这样的函数


第一个
ReadClockRecordTotal: 读设备已经存储的记录数

语法:
function ReadClockRecordTotal(hPort: THandle; var data: Integer): Boolean;

参数说明:
hPort: 端口句柄, 调用OpenCommPort函数得到,需要联机
data: 返回记录数量

返回变量: 如果返回True表示成功,如果返回False表示失败。

第二个
ReadStandardRecord: 读所有刷卡记录

语法:
function ReadStandardRecord(hPort: THandle; Data: PChar; timeString: PChar; var mark: Char;
var flag: Integer; var cardTimes: Integer; var cardGroup: Integer): Boolean;

参数说明:
hPort: 端口句柄, 调用OpenCommPort函数得到,需要联机
data: 读回的卡号字符串, 缓冲区需大於20字节长度
timeString: 读回的14位刷卡时间字符串, 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
mark: 读卡机标识字符.
flag: 存储卡的结果, 对应二进制数各位的意义如下: flag = 0 : 表示为正常卡 flag.0 = 1 : 表示为非法门禁卡 flag.1 = 1 : 表示为非法考勤卡 flag.2 = 1 : 表示为黑名单卡
cardTimes: 发卡次数, 0-15
cardGroup: 卡的组别, 0-255

返回变量: 如果返回False表示当前记录读取失败,如果返回True表示成功

然后我在C#的项目里面做了个EastRiver类,然后用
[DllImport("EastRiver.dll")] public static extern bool ReadStandardRecord(int hPort,ref string Data,ref string timeString,ref string mark,ref int flag,ref int cardTimes,ref int cardGroup);//读刷卡记录(^2G)

[DllImport("EastRiver.dll")] public static extern bool ReadClockRecordTotal(int hPort,ref int data);//读设备已经存储的考勤记录数

连对接动态库,但是我在程序里用

string data="";
string timeString="";
string mark="";
int flag=0;
int cardTimes=0;
int cardGroup=0;
if(EastRiver.ReadStandardRecord(hport,ref data,ref timeString,ref mark,ref flag,ref cardTimes,ref cardGroup))//提取考勤数据
{
string sql="insert into n_kqjlu(cardid,sjian,skjg) values('"+data.ToString()+"','"+timeString.ToString()+"','"+num.ToString()+"')";
SqlDataAdapter myDataAdapter= new SqlDataAdapter(sql,myConnection);
DataSet dt=new DataSet();
myDataAdapter.Fill(dt);
RefreshDataGrid(data.ToString(),num.ToString(),timeString.ToString(),flag);
}

的时候不能提取到正常的卡号,出现string类型的数据都为"",因此我想是不是dephi里面的pchar类型到C#里面的string类型,我是不是转错了!第一个函数就一点问题都没有!int转int就不会出现为空或者出错的情况!

...全文
288 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudtarget 2007-04-07
  • 打赏
  • 举报
回复
用dephi就好写了!
samfeng_2003 2006-07-05
  • 打赏
  • 举报
回复
呵呵!最近用DEPHI写了一下,看了一下例子,终于明白了,因为制定了一个record的Flist,所以很多类型没有接对!用dephi就好写了!
78984598 2006-06-30
  • 打赏
  • 举报
回复
与数据库是无关,关于C#的问题,可能是非托管声明出了问题,至于DELPHI这个问题,如我上所说。
skyboy0720 2006-06-30
  • 打赏
  • 举报
回复
这应该和应用程序语言有关,不属于数据库的问题~
78984598 2006-06-30
  • 打赏
  • 举报
回复
因为这些是创建ListItem的子列啊,
samfeng_2003 2006-06-30
  • 打赏
  • 举报
回复
对了,版主大哥,是因为C#的人不太热情,所以才想到窝里发这样的帖子的,别删啊!谢谢了!
samfeng_2003 2006-06-30
  • 打赏
  • 举报
回复
是的,需要我分配16位空间,没有分配来!:(

哎!好久没有来,看到大家的热情,感动哈!

对了有人顺便就回答我上头的问题了嘛!最近没有混分,分都快干了!
samfeng_2003 2006-06-30
  • 打赏
  • 举报
回复
我现在在用dephi在写,但是我在用listview组件的时候遇到个问题!不好意思,就连带请大家解决.
55555555555555!只写了一天dephi,确实好多不懂!

procedure Tform1.lvClockID_Show();
var
i: Integer;
begin
Form1.lvClocks.Items.BeginUpdate;
try
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Text := 'select * from decive';
Form1.ADOQuery1.Open;
Form1.lvClocks.Items.Clear;
for i := 0 to Form1.ADOQuery1.RecordCount-1 do
begin
with lvClocks.Items.Add do
begin
Caption := (ADOQuery1.FieldByName('d_id').AsString);
SubItems.Add(ADOQuery1.FieldByName('Decive_name').AsString);
SubItems.Add(ADOQuery1.FieldByName('port_name').AsString);
SubItems.Add(ADOQuery1.FieldByName('port_speed').AsString);
SubItems.Add(ADOQuery1.FieldByName('Decive_type').AsString)
end;
Form1.ADOQuery1.Next;
end;
finally
lvClocks.Items.EndUpdate;
end;
end;

就是listview控件我用了五列
0 索引号 (设定宽度为1)
1 机号
2 通信端口
3 通信速率
4 设备类型

但是我这样写
SubItems.Add(ADOQuery1.FieldByName('d_id').AsString
SubItems.Add(ADOQuery1.FieldByName('Decive_name').AsString);
SubItems.Add(ADOQuery1.FieldByName('port_name').AsString);
SubItems.Add(ADOQuery1.FieldByName('port_speed').AsString);
SubItems.Add(ADOQuery1.FieldByName('Decive_type').AsString)

不能对应合适,为什么啊!
昵称被占用了 2006-06-30
  • 打赏
  • 举报
回复
可能这样可以

string data="";
--〉
string data="0000000000000000000000000000000000000000";
昵称被占用了 2006-06-30
  • 打赏
  • 举报
回复
问题可能在你必须在读取前分配空间,不知道c#怎么分配的

vb用法:

string data="";
--〉
dim data string(50)
78984598 2006-06-30
  • 打赏
  • 举报
回复
[DllImport("EastRiver.dll")] public static extern bool ReadStandardRecord(int hPort,out string Data,out string timeString,out string mark,out int flag,out int cardTimes,out int cardGroup);

[DllImport("EastRiver.dll")] public static extern bool ReadClockRecordTotal(int hPort,out int data);

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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