描述:
我传int不行,传字符串也不行。是不是还要经过转化的?
几种类型的对应关系是怎样的?
解决方案1:
呵呵,我也回复了,你收收信吧。
解决方案2: 如果你是用vc 里面选择activex控件工程就得这样添加能够在外面的调用的工程!
因为我做过吃过些苦头!先给你些建议供参考!
1。你最好注意一下参数类型,int long string 之类可以做入参!字符串之类的要想传出来的话通过参数当然也可以带回,但是最好是用返回值返回!
下面是我用过的一个函数
BSTR CReaderCtrlCtrl::DES(long handle, LPCTSTR szRandam, LPCTSTR szData)
{
CPSAMCard card;
WORD wReturn;
CString strmac;
wReturn=card.DES((HANDLE)handle,(char *)szRandam,
(char*)szData,strmac.GetBuffer(9));
strmac.ReleaseBuffer();
return strmac.AllocSysString();
}
2。最好是一次把函数添加好!如果通过上述方法添加函数之后直接在文件里面修改将出现问题!至少我现在还没有解决了!一般是删除了!重新添加函数
运用MFC来实现ActiveX控件的方法
1.何谓ActiveX?
简言之,Active X是一种允许程序(即ActiveX控件)在网络(如Internet)
上与其它程序交互通信的体系结构。这种体系结构均使用微软公司的组件
对象模型(COM)和分布式组件对象模型(DCOM)标准。其中,COM允许不
同的应用程序实现本地相互交谈,而DCOM提供在网络上的(应用程序间)
通信。
2.使用MFC创建ActiveX控件
VC++ 5.0提供了MFC ActiveX Control Wizard来生成ActiveX控件的框
架文件,并使用Class Wizard来定义控件的属性、方法和事件。同时,在
MFC类库中,还为开发ActiveX控件提供了强有力的COLeControl类。由
于COLeControl类是从CWnd类派生的,因此ActiveX控件具有Windows
窗口对象所具有的全部功能。下面将介绍如何使用VC++5.0来创建ActiveX
控件的过程。
(1) 创建ActiveX控件工程
A.创建工程存放目录"C:\MyVc";
B.启动VC++ 5.0;
C.选File\New,弹出如图1的对话框;
D.选Projects标签,在工程类型列表中选MFC ActiveX Control Wizard,
将Location框设为C:\ MyVc ,将Project Name框设为MyTest,然后选Next,
承认缺省设置,直到选Finish。VC++将显示New Project Information对话框,
点击OK;
E.选Build\Set Active Configuration,VC++将显示Set Active Configuration
对话框,选MyTest-Win32 Debug;点击OK。
以上即完成了名为MyTest的ActiveX控件工程的创建,其工程文件名
的后缀为OCX。
(2) 测试MyTest控件
A.选Build\Build MyTest.OCX,VC++5.0将自动的进行编译、连接
MyTest控件的文件,并创建MyTest.OCX文件。
B.选Tools\ActiveX Control Test Container,VC++5.0将执行Test
Container程序,测试MyTest控件。
3.使用VC++5.0为ActiveX控件添加事件
ActiveX控件是通过事件来通知容器控件发生事情,如单击控件、用
键盘输入数据等。当这些动作发生时,控件点火(Firing)一个事件并通知容
器。MFC支持两种事件:库存事件(stock event)和定制事件(custom
event)。库存事件是由ColeControl自动处理的事件,而定制事件能识别某
一确定的动作,由用户自行定义。
对于每个控件点火一个事件,控件类必须映射每个控件事件为当事件
发生时要调用的成员函数。还可以用ClassWizard来访问和操纵控件事件的
映射。在控制类的头文件中,事件映射由以下宏定义:
DECLARE_EVENT_MAP( )
一旦声明了事件映射,就必须在实现文件中定义。
(1)添加库存事件
VC++ 5.0可以利用Windows提供的ActiveX控件库,来为用户程序添加
ActiveX控件的库存事件。下面以例程Calculator加以说明。
<1>创建一名为Calculator的MFC AppWizard(exe)工程,IDD_Calculator_
DIALOG对话框的属性表见表1;
对象 属性 属性值
Dialog Box ID IDD_Calculator_DIALOG
Caption MyCalculator
Calcu Control ID ID_CAL1
Push Button ID IDC_TODAY_BUTTON
Caption To&day
Push Button ID IDC_EXIT_BUTTON
Caption &Exit
表1
<2>登记Calculator ActiveX控件;
A.在VC++5.0中,选Tools\ ActiveX Control Test Container,执行Test
Container程序;
B.在Test Container程序的主窗口,选File/Register
Controls,点击Register,确定C:
\WINDOWS\SYSTEM\MSCAL.OCX"路径,再点击Open。
C.弹出Controls Register对话框,从Control File列查对"C:\WINDOWS\
SYSTEM\ MSCAL OCX"是否已登记成功;
D.登记成功后,退出Test Container程序。
<3>在MFC Class Wizard中为Calculator引入变量,添加消息,见表2;
Class name Object ID Message
CCalculatorDlg CCalculatorDlg WM_INITDIALOG
CCalculatorDlg IDC_TODAY_BUTTON BN_CLICKED
CCalculatorDlg IDC_EXIT_BUTTON BN_CLICKED
表2
<4>VC++5.0打开CalculatorDlg.cpp,为各变量编写代码。
A.初始化CCalculatorDlg
BOOL CCalculatorDlg::OnInitDialog()
{
Cdialog::OnInitDialog();
。。。
//TODO:Add extra initialization here
//加入我的代码
m_cal.Today( ) ;
//结束我的代码
//return TRUE;
}
B. Today钮的代码
void CCalculatorDlg::OnTodayButton( )
{
//TODO: Add your control notification handler code here
//加入我的代码
m_cal.Today( ) ;
//结束我的代码
}
C. Exit钮的代码
void CCalculatorDlg::onExitButton( )
{
//TODO: Add your control notification handler code here
//加入我的代码
OnOK( ):
//结束我的代码
}
<5>程序运行
在VC++5.0中,选Build\Build Calculator.exe,建立可执行文件;再
选Build\Execute Calculator.exe, 运行程序。
(2)添加定制事件
<1>定制事件的映射宏为EVENT_CUSTOM,并可以使用ClassWizard
添加定制事件,这包括确定事件的外部名和内部名、给事件赋参数以及确
定何时点火事件等。下面以CKeyChoice事件为例加以说明。
向MyTest控件添加CKeyChoice定制事件:
A.选View\ClassWizard,在Active Events标签里将Class Name设
为CmyTestCtrl;
B.点击Add EventExternal,将name设为FireCKeyChoice,VC++5.0
会自动将Internal name设为FireCKeyChoice;
C.选OK,关闭ClassWizard对话框。
<2>测试结果:
A.选Build/Rebuild All,编译、连接Mytest控件的文件;
B.选Tools\ActiveX Control Test Container\Insert OLE Control,
选MyTest Control,点击OK。
C.选File\Exit,退出Test Container。
打开文件MyTestCtrl。Cpp,找到onKeyDown函数,加入触发
CKeyChoice事件的程序代码。
void CMyTestCtrl::onKeyDown(UNIT nChar,UNIT nRepCnt,UNIT nFlags)
{
//TODO:Add your message handler code here and/or call default
//加入我的代码
char strnChar[10];
char strnRepCnt[10];
char strnFlags[10];
Cstring strKeyPress;
itoa(nChar,strnChar );
itoa(nRepCnt,strnRepCnt);
itoa(nFlags ,strnFlags);
strKeyPress=(Cstring)"You pressed the key:\n"+
"nChar="+ strnChar+"\n"+
"nRepCnt="+ strnRepCnt+"\n"+
"nFlags="+ strnFlags+"\n"+
strKeyPress。MakeUpper();
//以上完成从键盘输入数据
if(strKeyPress= ="PAINT")
system("pbrush。exe");
//若输入"PAINT"(与大小写无关),则Windows的调用"画板"
else&