首页 - 信息 - vb 6.0 vs2010_VS2010开发VB6.0 activeX控件dll

vb 6.0 vs2010_VS2010开发VB6.0 activeX控件dll

2023-10-01 07:32

?

最近在公司使用了公司开发的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编程方面有很多不同之处,我们需要多发现、多思考、多研究,最后真正掌握开发软件语言与平台的精髓之处。