?
最近在公司使用了公司开发的webservice接口,然后发现自己的一个想法可以用webservice来实现,于是就想着自己搭建一个webservice,尝试发布一下,并且使用vb6.0调用测试。
?
1。首先搜索了webservice的建立,找到了一篇博文:
https://www.gsm-guard.net/zqzjs/p/4705994.html
有关于webservice建立的详细说明。我按照这个例子写了自己的webservice测试服务。
使用系统;
使用 System.Collections.Generic;
使用System.Linq;
使用 System.Web;
使用 System.Web.Services;
命名空间 MyWeb
{
///
/// CAPI 的摘要描述
///
[WebService(命名空间 = "http://localhost/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 要允许使用 www.gsm-guard.net AJAX 从脚本调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
公共类CAPI:System.Web.Services.WebService
{
[WebMethod]
公共字符串HelloWorld()
{
返回“Hello World”;
}
[WebMethod]
公共字符串CV1_TT_Report(字符串站,字符串tt)
{
Console.WriteLine(station + ";" + tt);
回程站+“;” + tt;
}
}
}
然后将程序发布到D:\Web,生成的文件如下所示:
2,之后就发布了。由于我的笔记本电脑比较弱,所以一直使用XP系统。经过搜索,发现XP下有IIS5.1,于是下载了IIS5.1并安装。
安装细节就不赘述了,只说一下我遇到的坑:
<1>由于系统是ghost,所以精简了一些dll,安装过程中报了一些错误。后来找到一个好用的安装包,里面居然包含了几个常用的dll。预计iis5安装会比较顺利。 .1
附上链接,方便以后查找
链接:https://www.gsm-guard.net/s/1J2BjWUHGgedvKayFDhl6Uw 提取码:odio
<2>安装iis5.1后,在浏览器中输入127.0.0.1进行测试。我发现需要输入账号密码。我又查了一下,找到了答案:
https://www.gsm-guard.net/view/efe421875acfa1c7ab00cca6.html
?
<3>然后是iis5.1的一些配置。您需要先注册 www.gsm-guard.net IIS,然后才能使用它。输入cmd,回车,输入神秘代码:
C:\WINDOWS\www.gsm-guard.net\Framework\v4.0.30319\aspnet_regiis -i(根据实际安装的framework版本和路径进行适当调整)
然后就可以建立一个网站了。这里需要特别说明一下。 XP不能建网站,只能创建虚拟目录,同时只能有10个连接(这个我也发现了,自己没试过,反正我只是调试一下,等一下) )
如果你设置这个别名来测试,那么你需要输入127.0.0.1/?然后在浏览器中测试,即127.0.0.1/test
我以为这样就可以访问了,结果出现了错误:
然后发现我发布的webservice的名字是CAPI.asmx,所以需要添加iis激活的默认文档,否则iis无法根据默认文档集找到网站,所以会报错。
这个很简单,添加就可以啦~右键新建的虚拟目录,点击属性
?
?添加我们的CAPI.asmx,然后打开浏览器测试一下,终于发布成功了
?
接下来测试一下我们的VB6.0是否可以调用webservice接口
新建一个vb6.0标准exe项目
只需写一点代码:
私人抄送作为新的 SoapClient
私有子命令1_Click()
昏暗 S$
S = www.gsm-guard.net1_TT_Report("S", "12")
消息框 S
结束子
私有子表单_Load()
cc.mssoapinit“http://localhost/test/?WSDL”
结束子
运行它:
看起来很成功。
?
所以我也可以使用webservice来实现我自己的想法。
转载于:https://www.gsm-guard.net/bluelife1206/p/10976700.html
项目源码
https://www.gsm-guard.net/download/csdn_z_s/10427764
开发环境
操作系统:win7 64位旗舰版
Java语言开发环境:? Eclipse3.7(jdk1.6u45)
C/C++语言开发环境:? cn_visual_studio_2010_ultimate_x86
VB语言开发环境:? VB6.0
前言
我们的项目主要是用Java编写的,其中涉及到用于调用本地设备底层模块的C/C++语言。 JNI技术用于Java和C/C++之间的调用。底层模块连接到本地设备。一种方法是集成 DLL(动态链接库)。
前段时间,项目需要集成第三方厂商(Y工厂)的DLL(YC.DLL)。 Y厂的DLL是用VB编写的,编译环境是VB6.0。拿到DLL后,首先使用Dependency Walker查看内部接口名称,只有四个:
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
果然,这就是传说中的activeX。从网上的资料来看,VB6.0编译出来的dll都是activeX控件。
至于DLL、OCX、activeX、COM组件之间的概念区别,网上有很好的资料。
插曲
从Y工厂获取YC.DLL后,请按照下一节中的步骤操作。编译YC.DLL后,编译器会提示“无法加载动态库类型”,但Y厂没有相关的C/C++技术支持可以为其DLL提供C/C++调用方法。虽然我之前写过ocx控件,但是我按照下一节的步骤编译了我的ocx控件,一切都很顺利。但我从来没有在VB6.0电脑上通过VB语言进行开发的经历,导致开发进度一再停滞。
后来无意中在网页上发现了一个帖子,引用了一个在VS2010上用VB6.0编译的dll。截图如下:
?
按照图中的步骤,我的vs2010居然可以引用Y工厂的dll了。
有关vb6controls.reg的信息请参考:
注册表编辑
?
HKEY_CLASSES_ROOT\Licenses = 许可:复制密钥可能会侵犯既定的版权。
?
// Masked Edit Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\BC96F860-9928-11cf-8AFA-00AA00C00905 = mmimfflflmqmlfffrlnmofhfkgrlmmfmqkqj
?
// Chart Control 6.0 (OLEDB) 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\12B142A4-BD51-11d1-8C08-0000F8754DA1 = aadhgafabafajhchnbchehfambfbbachmfmb
?
// Common Dialog Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\4D553650-6ABE-11cf-8ADB-00AA00C00905 = gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj
?
// ADO Data Control 6.0 (OLEDB) 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\C4145310-469C-11d1-B182-00A0C922E820 = konhqhioohihphkouimonhqhvnwiqhhhnjti
?
// Common Controls-3 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\38911DA0-E448-11D0-84A3-00DD01104159 = mcpckchcdchjcjcclidcgcgchdqdcjhcojpd
?
// Windows Common Controls-2 5.0 (SP2) 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\9E799BF1-8817-11cf-958F-0020AFC28C3B = uqpqnqkjujkjjjjqwktjrjkjtkupsjnjtoun
?
// Windows Common Controls 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\57CBF9E0-6AA7-11cf-8ADB-00AA00C00905 = aahakhchghkhfhaamghhbhbhkbpgfhahlfle
?
//数据绑定网格控制5.0(SP3)许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\556C75F1-EFBC-11CF-B9F3-00A0247033C4 = xybiedobrqsprbijaegcbislrsiucfjdhisl
?
//数据绑定列表控件6.0许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\096EFC40-6ABF-11cf-850C-08002B30345D = knsgigmnmngnmnigthmgpninrmumhgkgrlrk
?
// Internet Transfer Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908 = yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun
?
// Multimedia Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\B1EFCCF0-6AC1-11cf-8ADB-00AA00C00905 = qqkjvqpqmqjjpqjjvpqqkqmqvkypoqjquoun
?
// Chart Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\7C35CA30-D112-11cf-8E72-00A0C90F26F8 = whmhmhohmhiorhkouimhihihwiwinhlosmsl
?
// Windows Common Controls-2 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D = iplpwpnippopupiivjrioppisjsjlpiiokuj
?
// Windows Common Controls 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1 = knlggnmntgggrninthpgmnngrhqhnnjnslsh
?
// Comm Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
?
// DataGrid Control 6.0 (OLEDB) 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\CDE57A55-8B86-11D0-b3C6-00A0C90AEA82 = ekpkhddkjkekpdjkqemkfkldoeoefkfdjfqe
?
// DataList Control 6.0 (OLEDB) 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\A133F000-CCB0-11d0-A316-00AA00688B10 = cibbcimbpihbbbbbnhdbeidiocmcbbdbgdoc
?
// DBWin 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\D015B071-D2ED-11d0-A31A-00AA00688B10 = gjdcfjpcmjicjcdcoihcechjlioiccechepd
?
// MSDBRPT 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\9DF1A470-BA8E-11D0-849C-00A0C90DC8A9 = cchcqjejhcgcqcfjpdfcdjkckiqikchcojpd
?
// FlexGrid Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\72E67120-5959-11cf-91F6-C2863C385E30 = ibcbbbebqbdbciebmcobmbhifcmciibblgmf
?
// MAPI Controls 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\899B3E80-6AC6-11cf-8ADB-00AA00C00905 = wjsjjjlqmjpjrjjjvpqqkqmqukypoqjquoun
?
// MSRDO 2.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\B1692F60-23B0-11D0-8E95-00A0C90F26F8 = mjjjccncgjijrcfjpdfjfcejpdkdkcgjojpd
?
// RemoteData Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\43478d75-78e0-11cf-8e78-00a0d100038e = imshohphlmnhimuinmphmmuiminhlmsmsl
?
// Windowless Controls 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\80E80EF0-DBBE-11D0-BCE2-00A0C90DCA10 = qijimitpmpnpxplpvjnikpkpqoxjmpkpoivj
?
// PictureClip Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\6FB38640-6AC7-11cf-8ADB-00AA00C00905 = gdjkokgdldikhdddpjkkekgknesjikdkoioh
?
// Rich TextBox Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\DC4D7920-6AC8-11cf-8ADB-00AA00C00905 = iokouhloohrojhhhtnooiokomiwnmohosmsl
?
// Sheridan Tab Control 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\190B7910-992A-11cf-8AFA-00AA00C00905 = gclclcejjcmjdcccoikjlcecoioijjcjnhng
?
// SysInfo Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\许可证\E32E2733-1BC5-11d0-B8C3-00A0C90DCA10 = kmhfimlflmmfpffmsgfmhmimngtghmoflhsg
?
//Winsock Control 6.0 许可证密钥
?
HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d = mlrljgrlhltlngjlthrligklpkrhllglqlrk
积分方法-#import
语法:
#import?"dllPath"?no_namespace
?
使用#import语句,然后重新编译项目。编译器会在工程目录下生成两个文件:YC.tlh和YC.tli。 YC.tlh 文件与 C/C++ 头文件类似。有一个dll接口声明:
?
struct __declspec(uuid("578277c2-7735-4c61-a141-1df16558cd4d"))
/* LIBID */ __SmartCardLib;
struct __declspec(uuid("fa7ab805-ec44-4a84-b876-52da8a5fe3c3"))
/*双接口*/ _clsSmartCard;
struct /* coclass */ clsSmartCard;
struct __declspec(uuid("ff073a9e-e768-4024-b9cf-bcc05efd1329"))
/*调度接口*/__clsSmartCard;
?
_COM_SMARTPTR_TYPEDEF(_clsSmartCard, __uuidof(_clsSmartCard));
_COM_SMARTPTR_TYPEDEF(__clsSmartCard, __uuidof(__clsSmartCard));
?
struct __declspec(uuid("fa7ab805-ec44-4a84-b876-52da8a5fe3c3"))
_clsSmartCard:IDispatch
{
};
?
struct __declspec(uuid("5c4d3831-f09d-471b-82a0-0e84240c8afc"))
cls智能卡;
?
struct __declspec(uuid("ff073a9e-e768-4024-b9cf-bcc05efd1329"))
__clsSmartCard:IDispatch
{
??? // 方法:
};
这个文件告诉我们两个非常重要的信息:
首先通过“struct /* coclass */ clsSmartCard;”这行代码,我们知道YC.DLL的
CLSID(5c4d3831-f09d-471b-82a0-0e84240c8afc),CLSID可以认为是YC.DLL的入口。
第二个是,通过_clsSmartCard: IDispatch和__clsSmartCard: IDispatch,我们知道
_clsSmartCard 和 __clsSmartCard 是 DLL 内的接口声明。通过接口声明,我们可以知道这个动态库给我们提供了哪些功能。
导入.h
#import "C:\\YC.dll" no_namespace
智能指针
#包括
#include "import.h"
#包括
?
void main_CComPtr(){
?
if (!SUCCEEDED(CoInitialize(NULL)))?
??? {
???????返回;
??? }
?
??? CLSID clsid;?
?
?
??? HRESULT hr = CLSIDFromString(L"{5c4d3831-f09d-471b-82a0-0e84240c8afc}", &clsid);
??? if (!成功(小时))
??? {
???????返回;
??? }
?
??? // 创建CLSID的另一种方式
??? //CLSID clsid;?
??? //www.gsm-guard.net1=0x5c4d3831;?
??? //www.gsm-guard.net2=0xf09d;??
??? //www.gsm-guard.net3=0x471b;?
?
??? //www.gsm-guard.net4[0]=0x82;?
??? //www.gsm-guard.net4[1]=0xa0;?
??? //www.gsm-guard.net4[2]=0x0e;?
??? //www.gsm-guard.net4[3]=0x84;?
??? //www.gsm-guard.net4[4]=0x24;?
??? //www.gsm-guard.net4[5]=0x0c;?
??? //www.gsm-guard.net4[6]=0x8a;?
??? //www.gsm-guard.net4[7]=0xfc;
?
??? CComPtr<_clssmartcard> pGetRes;?
?
??? pGetRes.CoCreateInstance(clsid);?
??? printf("%d", pGetRes->Connect("勾起"));?
?
???变体?卡号;
???变体?定制否;
???变体?订单日期;
???变体?订单金额;
???变体?订单号;
???变体?订单总计;
???变体? fgs;
???变体? GLZ;
???变体?卡状态;
???变体?工厂代码;
???变体?卡密码;
???变体?卡类型;
???变体? chgPwd;
?
??? ::VariantInit(&cardNo);
??? ::VariantInit(&customNo);
??? ::VariantInit(&orderdate);
??? ::VariantInit(&orderAmount);
??? ::VariantInit(&orderNum);
??? ::VariantInit(&orderTotal);
??? ::VariantInit(&fgs);
??? ::VariantInit(&glz);
??? ::VariantInit(&cardStatus);
??? ::VariantInit(&工厂代码);
??? ::VariantInit(&cardPwd);
??? ::VariantInit(&cardType);
??? ::VariantInit(&chgPwd);
?
??? pGetRes->readCard(&cardNo,
?????????????????? &定制否,
?????????????????? &订单日期,
?????????????????? &订单金额,
?????????????????? &订单号,
?????????????????? &订单总计,
?????????????????? &fgs,
?????????????????? &glz,
?????????????????? &卡状态,
?????????????????? &工厂代码,
?????????????????? &卡密码,
?????????????????? &卡片类型,
?????????????????? &chgPwd);
?
??? pGetRes->Disconnect();
?
??? pGetRes.Release();
??? CoUninitialize();
?
}
CoGetClassObject
#include "import.h"
?
void mainCoGetClassObject(){
?
?
??? CoInitialize(NULL);?
?
??? CLSID clsid;?
?
??? HRESULT hr = CLSIDFromString(L"{5c4d3831-f09d-471b-82a0-0e84240c8afc}", &clsid);
??? if (!成功(小时))
??? {
???????返回;
??? }
?
??? _clsSmartCard* ptr;?
?
??? IClassFactory* p_classfactory;?
??? hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,?
???????????????????????? NULL,IID_IClassFactory,??
???????????????????????? (LPVOID*)&p_classfactory);?
?
??? p_classfactory->CreateInstance(NULL,__uuidof(_clsSmartCard),?
?????????????????????????????????????????? (LPVOID*)&ptr);
?
?
??? printf("mainCoCreateInstance -> Connect=%d", ptr->Connect("勾起"));
?
???变体?卡号;
???变体?定制否;
???变体?订单日期;
???变体?订单金额;
???变体?订单号;
???变体?订单总计;
???变体? fgs;
???变体? GLZ;
???变体?卡状态;
???变体?工厂代码;
???变体?卡密码;
???变体?卡类型;
???变体? chgPwd;
?
??? ::VariantInit(&cardNo);
??? ::VariantInit(&customNo);
??? ::VariantInit(&orderdate);
??? ::VariantInit(&orderAmount);
??? ::VariantInit(&orderNum);
??? ::VariantInit(&orderTotal);
??? ::VariantInit(&fgs);
??? ::VariantInit(&glz);
??? ::VariantInit(&cardStatus);
??? ::VariantInit(&工厂代码);
??? ::VariantInit(&cardPwd);
??? ::VariantInit(&cardType);
??? ::VariantInit(&chgPwd);
?
??? ptr->readCard(&卡号,
?????????????????? &定制否,
?????????????????? &订单日期,
?????????????????? &订单金额,
?????????????????? &订单号,
?????????????????? &订单总计,
?????????????????? &fgs,
?????????????????? &glz,
?????????????????? &卡状态,
??????????????????? &factoryCode,
??????????????????? &cardPwd,
??????????????????? &cardType,
??????????????????? &chgPwd );
?
??? ptr->Disconnect();
?
?
??? CoUninitialize();?
?
}
?
C oCreateInstance
?
CoCreateInstance
#include "import.h"
?
void mainCoCreateInstance(){
?
??? CoInitialize(NULL);?
??? CLSID clsid;?
???
?
??? HRESULT hr = CLSIDFromString(L"{5c4d3831-f09d-471b-82a0-0e84240c8afc}", &clsid);
??? if (!SUCCEEDED(hr))
??? {
??????? return;
??? }
?
??? _clsSmartCard *ptr;?
??? hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,?
????????????????? __uuidof(_clsSmartCard),(LPVOID*)&ptr);?
???
??? printf("mainCoCreateInstance - > Connect=%d", ptr->Connect("gouqi"));
?
??? VARIANT? cardNo;
??? VARIANT? customNo;
??? VARIANT? orderdate;
??? VARIANT? orderAmount;
??? VARIANT? orderNum;
??? VARIANT? orderTotal;
??? VARIANT? fgs;
??? VARIANT? glz;
??? VARIANT? cardStatus;
??? VARIANT? factoryCode;
??? VARIANT? cardPwd;
??? VARIANT? cardType;
??? VARIANT? chgPwd;
?
??? ::VariantInit(&cardNo);
??? ::VariantInit(&customNo);
??? ::VariantInit(&orderdate);
??? ::VariantInit(&orderAmount);
??? ::VariantInit(&orderNum);
??? ::VariantInit(&orderTotal);
??? ::VariantInit(&fgs);
??? ::VariantInit(&glz);
??? ::VariantInit(&cardStatus);
??? ::VariantInit(&factoryCode);
??? ::VariantInit(&cardPwd);
??? ::VariantInit(&cardType);
??? ::VariantInit(&chgPwd);
?
??? ptr->readCard(&cardNo,
??????????????????? &customNo,
??????????????????? &orderdate,
??????????????????? &orderAmount,
??????????????????? &orderNum,
??????????????????? &orderTotal,
??????????????????? &fgs,
??????????????????? &glz,
??????????????????? &cardStatus,
??????????????????? &factoryCode,
??????????????????? &cardPwd,
??????????????????? &cardType,
??????????????????? &chgPwd );
?
??? ptr->Disconnect();
?
?
??? CoUninitialize();?
?
}
?
LoadLibrary
?
#include
#include "import.h"
#include "MainLoadLibrary.h"
?
extern "C"
{
??? typedef HRESULT (__stdcall *pFunc)(REFCLSID rclsid,REFIID riid,LPVOID * ppv);
}???
?
void main_LoadLibrary(){
??? if (!SUCCEEDED(CoInitialize(NULL)))?
??? {
??????? return;
??? }
?
??? HINSTANCE hdllInst = LoadLibrary("E:\\YC.dll");?
?
??? pFunc func=(pFunc)GetProcAddress(hdllInst,"DllGetClassObject");?
???
??? if (func != NULL)?
??? {?
???????
??????? CLSID CLSID_SignCtrl_ocx;?
??????? HRESULT hr = CLSIDFromString(L"{5c4d3831-f09d-471b-82a0-0e84240c8afc}", &CLSID_SignCtrl_ocx);
??????? if (!SUCCEEDED(hr))
??????? {
??????????? return;
??????? }
?
??????? IClassFactory* pcf = NULL;
??????? hr = func(CLSID_SignCtrl_ocx, IID_IClassFactory,(void**)&pcf);?
?
??????? if (SUCCEEDED(hr) && (pcf != NULL))?
??????? {?
??????????? CLSID clsid;?
?
??????????? www.gsm-guard.net1=0xfa7ab805;?
??????????? www.gsm-guard.net2=0xec44;??
??????????? www.gsm-guard.net3=0x4a84;?
?
??????????? www.gsm-guard.net4[0]=0xb8;?
??????????? www.gsm-guard.net4[1]=0x76;?
??????????? www.gsm-guard.net4[2]=0x52;?
??????????? www.gsm-guard.net4[3]=0xda;?
??????????? www.gsm-guard.net4[4]=0x8a;?
??????????? www.gsm-guard.net4[5]=0x5f;?
??????????? www.gsm-guard.net4[6]=0xe3;?
??????????? www.gsm-guard.net4[7]=0xc3;
?
???????????? _clsSmartCard* pCall = NULL;
??????????? hr = pcf->CreateInstance(NULL, clsid, (void**)&pCall);?
?
??????????? if (SUCCEEDED(hr)?? && (pCall != NULL))?
??????????? {
??????????????? printf("Connect=%d", pCall->Connect("gouqi"));
?
??????????????? VARIANT? cardNo;
??????????????? VARIANT? customNo;
??????????????? VARIANT? orderdate;
??????????????? VARIANT? orderAmount;
??????????????? VARIANT? orderNum;
??????????????? VARIANT? orderTotal;
??????????????? VARIANT? fgs;
??????????????? VARIANT? glz;
??????????????? VARIANT? cardStatus;
??? ??????????? VARIANT? factoryCode;
??????????????? VARIANT? cardPwd;
??????????????? VARIANT? cardType;
??????????????? VARIANT? chgPwd;
?
??????????????? ::VariantInit(&cardNo);
??????????????? ::VariantInit(&customNo);
??????????????? ::VariantInit(&orderdate);
??????????????? ::VariantInit(&orderAmount);
??????????????? ::VariantInit(&orderNum);
??????????????? ::VariantInit(&orderTotal);
??????????????? ::VariantInit(&fgs);
??????????????? ::VariantInit(&glz);
??????????????? ::VariantInit(&cardStatus);
??????????????? ::VariantInit(&factoryCode);
??????????????? ::VariantInit(&cardPwd);
??????????????? ::VariantInit(&cardType);
??????????????? ::VariantInit(&chgPwd);
?
??????????????? pCall->readCard(&cardNo,
??????????????????????????????? &customNo,
??????????????????????????????? &orderdate,
??????????????????????????????? &orderAmount,
??????????????????????????????? &orderNum,
??????????????????????????????? &orderTotal,
??????????????????????????????? &fgs,
??????????????????????????????? &glz,
??????????????????????????????? &cardStatus,
??????????????????????????????? &factoryCode,
??????????????????????????????? &cardPwd,
??????????????????????????????? &cardType,
??????????????????????????????? &chgPwd );
?
??????????????? pCall->Disconnect();
??????????? }
?
??????????? pcf->Release();
???????
??????? } else{
??????????? printf("false");
??????? }
??? }??
?
??? FreeLibrary(hdllInst);
??? CoUninitialize();
?
??? getchar();
}
?
转载于:https://www.gsm-guard.net/cnblogszs/p/9067870.html
? ? ? ? 这段时间相信大家已经慢慢习惯使用VB6.0来制作各自的小程序了,不过除了VB6.0以外,VS2008和VS2010都可以进行VB程序设计,这一点想必没有太多同学去关注。
?????? 其实发现这个也纯属巧合,因为笔记本重装系统之后程序不全,而我有急着编程,所以就准备用家里的电脑写程序。之后才发现家里一直都没有安装VB6.0,而且网络也不甚通畅,所以只能用VS2010碰碰运气,好运的是VS2010支持VB系列的程序编辑,不过VS2010在很多方面与VB6.0平台有所不同,下面就来比较一下。
? ? ? ?这是VS2010的界面
?????? 一、VS2010中的VB编程没有Caption属性
?????? 如图
? ? ? ? ?这个是Button控件的全属性列表,可以看出Button控件在VS中并没有Caption属性,只有Text属性,其他控件包括Label等控件的属性也是同样。
?????? 二、VS2010在某些控件的命名上与VB不同
?????? 例如
? ? ? ?此为VB中文本输入框TextBox在VS2010中显示的名称,而在VB6.0中显示的却是
? ? ? ?可以看出,VS2010在部分控件名称上与VB6.0有一定区别,下面提供的是VS2010的部分控件列表。
三、由上表也可以轻易看出,VS2010的控件菜单远多于VB6.0.
?????? 其实VB6.0的控件也有很多很多,不过一般默认显示的只是那21种而已?。在我看来,这样有利有弊。
?????? VB利在简洁方便,常用的控件显示,拓展控件想要什么就去调取什么。弊在很多控件需要经过反复查找才能找到。
?????? VS利在功能全面,不必在去单找API控件什么的,要什么直接在控件栏找就行。弊在数量太过庞大,调取常用控件不方便。
四、VS具有控件自动标尺功能,如图
? ? ? ?其中蓝、粉两条线就是VS2010中的空间标尺线,用来对齐和调整控件。
?????? 而VB6.0中使用的则简单得多
? ? ? ?其中黑色的小点就是用来调整和对齐用的标志。?
?
?????? 其实VS2010与VB6.0之间在VB编程方面有很多不同之处,我们需要多发现、多思考、多研究,最后真正掌握开发软件语言与平台的精髓之处。