| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 569 人关注过本帖
标题:VFP如何使用外部dll
只看楼主 加入收藏
laibinhua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-12-23
结帖率:16.67%
  问题点数:0  回复次数:8   
VFP如何使用外部dll
请教老师:在C# 可以下面代码正常使用这个dll,请问VFP里要怎么用它
        public const string path = @"ICCInter_HZ.dll";

        [DllImport(path)]
        public static extern void GetVer(IntPtr VerInfo);

        [DllImport(path)]
        public static extern int ICC_Transaction(int TransID, IntPtr DataIn, IntPtr DataOut);
VFP,我这样写,不对!?
表单LOAD事件
l_dll = MYPATH+ "\ICCInter_HZ.dll"
IF !FILE(l_dll)
   MESSAGEBOX("缺少文件"+l_dll+",阅读失败!",16,"提示")
   RETURN
ENDIF
Declare INTEGER ICC_Transaction IN (l_dll) int TransID,string DataIn,string @DataOut
表单Button1 click事件
LOCAL lma1
lma1=SPACE(200)
lma1=ICC_Transaction(1113,'12345')

thisform.edit1.Value=STRTRAN(ALLTRIM(lma1),CHR(0),[])


附:a)函数:ICC_Transaction
int ICC_Transaction (int TransNum, char *DataIn, char *DataOut)

说明:
应用系统卡交易处理入口。
具体交易定义请参见交易代码定义表。
参数:
TransNum    -    输入交易代码(见交易代码定义表)。
DataIn        -    输入数据字符串。
DataOut        -    输出数据字符串,注意分配足够存储空间。
返回:
0    -    成功。
< 0    -    错误(见错误代码定义表)。

[此贴子已经被作者于2019-1-15 15:48编辑过]

2019-01-15 15:43
csyx
Rank: 4
等 级:贵宾
威 望:10
帖 子:59
专家分:258
注 册:2018-3-13
  得分:0 
?ICC_Transaction(1113,'12345', @lma1)
2019-01-15 16:08
laibinhua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-12-23
  得分:0 
你好,谢谢回复:
它提示 Too many arguments
表单Init不知有没有写错
l_dll = MYPATH+ "\ICCInter_HZ.dll"
IF !FILE(l_dll)
   MESSAGEBOX("缺少文件"+l_dll+",阅读失败!",16,"提示")
   RETURN
ENDIF
Declare INTEGER ICC_Transaction IN (l_dll) int TransID,string DataIn,string @DataOut
表单button1 click
LOCAL lma1
lma1=SPACE(200)
lma1=ICC_Transaction(1113,'12345', @lma1)
2019-01-15 16:11
csyx
Rank: 4
等 级:贵宾
威 望:10
帖 子:59
专家分:258
注 册:2018-3-13
  得分:0 
看错啦

[此贴子已经被作者于2019-1-15 16:14编辑过]

2019-01-15 16:12
laibinhua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-12-23
  得分:0 
你好,改成你这样了还是一样的提示:
它提示 Too many arguments

表单Init改成如下
l_dll = MYPATH+ "\ICCInter_HZ.dll"
IF !FILE(l_dll)
   MESSAGEBOX("缺少文件"+l_dll+",阅读失败!",16,"提示")
   RETURN
ENDIF
Declare INTEGER ICC_Transaction IN (l_dll) int TransID,string DataIn,string, @DataOut
2019-01-15 16:15
csyx
Rank: 4
等 级:贵宾
威 望:10
帖 子:59
专家分:258
注 册:2018-3-13
  得分:0 
Declare INTEGER ICC_Transaction IN (l_dll) int TransID,string DataIn,string @DataOut
这种用法没试过,先改成绝对路径试试
2019-01-15 16:21
laibinhua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-12-23
  得分:0 
改成 这样了,还是一样的提示:
Declare INTEGER ICC_Transaction IN "C:\dxyybsoft\ICCInter_HZ.dll" int TransID,string DataIn,string @DataOut
2019-01-15 16:24
吹水佬
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:184
帖 子:6498
专家分:28696
注 册:2014-5-20
  得分:0 
函数原形:
int ICC_Transaction (int TransNum, char *DataIn, char *DataOut)
试试VFP声明:
Declare LONG ICC_Transaction IN "C:\dxyybsoft\ICCInter_HZ.dll" LONG, STRING@, STRING@
VFP调用:
nTransNum = 1113
cDataIn = "12345"
cDataOut = REPLICATE(0h00,200)
ret = ICC_Transaction(nTransNum, @cDataIn, @cDataOut)
if ret==0
    ? left(cDataOut, at(0h00,cDataOut)-1)
else
    ?"失败"
endif
2019-01-15 17:29
laibinhua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-12-23
  得分:0 
回复 8楼 吹水佬
老大出手不一般,搞定
2019-01-15 19:00







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057440 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved