Activex控件开发基础问题

candy110 2011-07-15 10:16:32
各位大哥大家好。
最近需要做一个在网页调用的控件,不需要界面。
程序已经用MFC把功能实现了(VC6.0)。
现在需要把其中的一下方法封装到控件里面供网页调用。

但是之前没写过类似的控件,
有一些基本的问题希望能得到大家的帮助:

1.不需要界面的控件在新建项目的时候是不是选择MFC Activex那个选项?
2.项目创建完成后接口和具体实现分别应该在哪个文件里面?
3.在MFC里面用到的CString,int等类型在MFC Activex里面对应什么类型?(在MFC ClassWizard里面添加方法的时候没这两个类型)

暂时就这几个问题。

如果有好点的系统的教程也请告诉一下。
谢谢大家了。
如果回复的人多,我会再加分。
...全文
160 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
candy110 2011-07-23
  • 打赏
  • 举报
回复
谢谢各位
星期一结贴
candy110 2011-07-18
  • 打赏
  • 举报
回复
谢谢楼上的各位。
我会自己先去学习一下,很快会来结贴。
wyx100 2011-07-18
  • 打赏
  • 举报
回复
如果没界面建议用ATL直接写,这样依赖很少,不需要MFC的库。

至于你用CString的话可以用WTL,里面有CString。

如果你用MFC的话,你CString当然可以在控件里使用。
allenhiman 2011-07-18
  • 打赏
  • 举报
回复
CString 可以使对应BSTR int可以对应LONG
luyangcplusplus 2011-07-18
  • 打赏
  • 举报
回复
CString int 类型都是有的
MoXiaoRab 2011-07-17
  • 打赏
  • 举报
回复
Google里搜 “Js 调用activeX”

你这么多问题,我没空给你慢慢科普,自己去找资料学习吧

我当初就这么搜了然后学起来的

而且写好了之后还要打包啊,等等一系列的事情
Waistcoat22 2011-07-17
  • 打赏
  • 举报
回复
如果没界面建议用ATL直接写,这样依赖很少,不需要MFC的库。

至于你用CString的话可以用WTL,里面有CString。

如果你用MFC的话,你CString当然可以在控件里使用。
candy110 2011-07-17
  • 打赏
  • 举报
回复
自己顶一下~
candy110 2011-07-16
  • 打赏
  • 举报
回复
2楼的兄弟,你好。
还有两个问题请教:
1.我这个是要控制客户端设备的,照你的方法生成的控件可以用吗?
2.CString,char*这些类型在私有方法里面可以用吗?这些方法不会被外部调用到。

谢谢,期待答复。
candy110 2011-07-15
  • 打赏
  • 举报
回复
可能是我没做过这类东西吧。
搜索出来的东西都不对。。。。。。
ywwj5858792qd 2011-07-15
  • 打赏
  • 举报
回复
确实网上搜下很多……
icessl 2011-07-15
  • 打赏
  • 举报
回复
下面的内容是从网上找到的,希望对你有所帮助:
一、建立工程
打开VC++6.0,选择New Projects中的ALT COM AppWizard, 并输入好工程名(如MyStudio),记住该工程名将成为ASP组件名的一部分(其实可以修改,但很麻烦),在下一页上选择Server Type 为DLL,并可考虑在Support MFC前打勾(想必使用MFC编程的人不少)。按Finish结束。在生成的代码中有四个标准的导出函数注册DLL的,我们不必关心。
二、创建COM对象(新建ATL活动模版库类)
在菜单上选择Insert New Class,并新建一个ATL Class,如取名为CmyComponent,你会发现在接口表中出现了一个ImyComponent,以后创建该接口的方法和属性就可以在ASP中使用了。把Aggregatable选项去掉,我们不需要它。保持其他不变。
三、添加接口方法
在ClassView中,右击ImyComponent,在出现的菜单中按Add Method。如图,在Method Name中可写上方法名如InitMyComp。在Parameters中写上方法的参数如[in]int Number1,[out,retval]int* Number2。这里要特别说明的是参数的写法。
1.对于传入的参数必须在参数前加上[in],然后可跟上如int n或float f等。且每个传入参数前都必须写明。
2.对于调用方法的返回,不再是该方法名前的类型(因为所有这些方法都返回HRESULT,即表明是否调用成功),所以使用传出的参数,在参数前必须加上[out,retval],然后可跟上如int* n 或者float* f等(如果返回的是int 或float 类型值时)。且每个方法仅限于返回一个这样的参数。在函数体中可如写上如“*Number2=Number1;”,表示把输入参数作为传出参数。
3.对于最常用的字符串参数在此我们使用BSTR str而不是通常的char* 或CString,所以在参数中需要写作[in]BSTR str 或[out,retval]BSTR* str。需要特别注意与CString的转换。如新建一个函数StrConv([in]BSTR bstr1,[out,retval]BSTR* bstr2),在函数体中可写上如:
CString str;
str=bstr1;
str=str.Left(str.GetLength()-1);
*bstr2=str.AllocSysString();
4.对于想把一个ASP对象作为参数的方法(如Request对象),可以使用[in]Iunkown *pIUnk,在函数体内,可用如下语句:(具体请查阅MSDN中的相关类的内容)
IRequest* pIRequest;
HRESULT hr = pIUnk->QueryInterface(IID_IRequest, reinterpret_cast(&pIRequest));
Long m_lDataSize;
HRESULT hr = pIRequest->get_TotalBytes(&m_lDataSize);
if (FAILED(hr))
return hr;
if (m_lDataSize == 0L)
{
return S_OK;
}
COleVariant varBytesToRead;
COleSafeArray sarrayBytes;
varBytesToRead = m_lDataSize;
sarrayBytes.CreateOneDim(VT_UI1, m_lDataSize);
hr = pIRequest->BinaryRead(&varBytesToRead, &sarrayBytes);
if (FAILED(hr))
{
sarrayBytes.Clear();
return hr;
}

5.对于不定个数参数,可使用SAFEARRAY,但使用方法较为复杂。可以在参数中输入如下的内容[in]SAFEARRAY array,并按Attribute…按钮,在Name中选择vararg。按确定后修改idl文件在把[in]SAFEARRAY array改为[in]SAFEARRAY(VARIANT) array。然后再打开MyComponent.h文件把该函数的参数SAFEARRAY array改为SAFEARRAY* array。再打开MyComponent.cpp文件修改参数,在函数体内使用COleSafeArray类实现该参数的控制,如“COleSafeArray SArray(array,VT_BSTR)”,具体操作可查阅MSDN中的该类的成员函数。

四、添加接口属性
在ClassView中,右击ImyComponent,在出现的菜单中按Add Property。如图,在Property中可选择属性类型如float,在下面可写上属性名如MyFloat。保持其他不变。这里需要说明的是在生成的put_MyFloat和get_MyFloat函数体中的书写。不妨举个小例:
1.在CMyComponent 中添加成员变量m_myFloat
2.在put_MyFloat 中写上:m_myFloat=newVal;
3.在get_MyFloat中写上:*pVal=m_myFloat
有成员变量也是它优于ISAPI的一个地方,在ISAPI中要在网页间传递信息,只能通过URL参数或者是Cookie来实现,因为每次调用都是一次新的链接,无法在网页之间仍然是同一次调用DLL,所以设置成员变量意义不大,只在一次调用中有用。而那两种方法都只能传递很有限的字符,除非利用创建服务器端临时文件(此方法很不好)。再说,ASP中的Session对象本身就是很好的存储信息的对象。
至此,我们创建了一个非常简单的没有什么功能的ASP组件,意在说明如何制作。下面,我们书写一个简单的ASP网页,来看看如何使用。网页如下:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
Set Obj=Server.CreateObject("MyStudio.MyComponent")
j=Obj.InitMyComp(5)
Response.Write(j)
%>
<p>
<%
Obj.MyFloat=3.9
j=Obj.MyFloat
Response.Write(j)
%>
<p>
<%
str1="abcd"
str2=Obj.StrConv(str1)
Response.Write(str2)
%>
</BODY>
</HTML>
显示结果为:
5
3.9
abc
quwei197874 2011-07-15
  • 打赏
  • 举报
回复
google一下一大堆

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧