标题:VFP如何使用外部dll
只看楼主
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
结帖率:56.36%
 问题点数: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编辑过]

搜索更多相关主题的帖子: VFP dll 代码 int 定义 
2019-01-15 15:43
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
?ICC_Transaction(1113,'12345', @lma1)
2019-01-15 16:08
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
看错啦

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

2019-01-15 16:12
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
Declare INTEGER ICC_Transaction IN (l_dll) int TransID,string DataIn,string @DataOut
这种用法没试过,先改成绝对路径试试
2019-01-15 16:21
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 8楼 吹水佬
老大出手不一般,搞定
2019-01-15 19:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492696-1-1.html




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

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