ATL 能不能继承VB编写的COM组件再封装成COM组件?
事情的起因:
asp调用VB写的组件,asp页面需要根据已经有的word文件模板自动生成新的word文件再打印。生成和打印的速度比较慢,影响asp的使用。于是想开发一个新组件,具有后台开线程的方式解决。
用VC采用建立ATL组件的方式,从原来的COM组件中继承一个新类,在VC中开线程后再调用父类的方法。编译通过,执行过程中,感觉根本没有调用父类方法。
现在做了一个vb组件的demo,只有一个函数,用来生成文件,但是要输入文件名和内容。经测试能够产生文件。
然后在VC ATL继承这个组件,重新构造一个函数封装上述vb函数,只是填写文件名和内容
BSTR bstrValue1 = ::SysAllocString(L"c:\\myFolder");
BSTR bstrValue2 = ::SysAllocString(L"Hello World");
_VBTest::CreateFile(&bstrValue1,&bstrValue2);
//调用父类的方法
编译也通过了,但是没有文件产生。
ATL 能不能继承VB编写的COM组件再封装成COM组件吗??以上代码有问题么?
问题点数:50、回复次数:3Top
1 楼wangweixing2000(星(inspiration(灵感)))回复于 2005-06-02 11:00:52 得分 50
最好跟一下代码,看看_VBTest::CreateFile(&bstrValue1,&bstrValue2);的两个参数值没有没有传递过去,看看返回的错误码事什么?Top
2 楼kes2000(云之雾)回复于 2005-06-02 11:15:47 得分 0
请问老大怎么跟踪??我只会部署到系统Com服务中,然后用asp网页调用组件看看产生文件没有
我现在用VC不用继承的方式,而采用声明一个VB的COM组件的方式。
1.ATL工程是支持MFC
2.先用MFC Classwizard导入VB的dll
3.导入后VB的dll的函数是
CString _TestClass::WriteFile(BSTR* fileName, BSTR* fileBody)
4.新建一个类,添加一个函数
VC的ATL的接口里面定义的函数是这样的
[id(2), helpstring("method WriteFile")] HRESULT WriteFile([in]BSTR fileName,[in]BSTR bodyName);
具体实现是这样的
STDMETHODIMP CmyComponent::WriteFile(BSTR fileName, BSTR bodyName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
_TestClass test;
test.WriteFile(&fileName,&bodyName);
return S_OK;
}
还是没有文件产生
另:
如果要把字符串"hello"转为BSTR * ,是不是
BSTR bstrValue = ::SysAllocString(L"c:\\myFolder");
再 &bstrValue 就可以Top
3 楼kes2000(云之雾)回复于 2005-06-06 11:14:27 得分 0
失望Top




