Fel*_*bek 2 c++ vb6 com dll volume-shadow-service
我的老板要我用C++编写一个DLL(MSVC++ 2010),它可以执行卷影复制,他可以从VB6(或以后的其他语言)调用它,并且可以在未完成时返回状态更新.他称之为"事件".
我觉得我最终需要学习COM(我宁愿不......)...而且,我想到了一个回调函数,但是从VB6到C++的函数指针肯定是不可能的?
有人可以概述我必须学习什么以及如何在有或没有COM的情况下实现这一目标?
编辑:回答问题,工作流程应该是:
VB6应用程序确定要备份的文件
我有一个路径并制作一个临时的卷影副本,其中包含此路径并返回一个挂载点(或类似的)
VB6应用程序备份卷影副本,然后删除卷影副本.
您可以使用AddressOf运算符将指向VB应用程序的"显示进度"功能指针传递给C++ DLL应用程序:
Declare Function CallMyDll ...
Sub DisplayStatus(ByVal SomeParameter As Long)
' ...
End SUb
Sub DoSomething()
Call CallMyDll(AddressOf DisplayStatus)
End Sub
Run Code Online (Sandbox Code Playgroud)
一些不那么明显的陷阱:
您必须使用__stdcall 调用约定声明您的C++函数指针.(谢谢,Alexandre C!)
在VB回调函数中,使用关键字将参数显式标记为按值ByVal.同样,在C++函数指针中,不要将参数标记为引用.
如果要将字符串传递给回调,或从中检索字符串,则必须考虑VB String不等于C char*s,C++ std::string或Microsoft CString.VB String必须映射到Microsoft相当模糊的BSTR数据类型.
我忘记了一个非常重要的事情:你的回调必须在VB模块中(即,它必须是一个"单纯的函数",而不是一个类或一个表单的方法).
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |