十万火急:哪位高手知道如何在VC中调用VB编写的com组件,有相关内容吗?

yanjingshui 2003-09-24 03:13:29
用#import vehicleonline.DLL,为何工程编译时不能识别智能指针,用vb com组件访问数据库,有什么具体例子?
...全文
97 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingfan2003 2003-09-26
  • 打赏
  • 举报
回复
http://www.codeproject.net 上有一篇文章
“Handling VB ActiveX Events in Visual C++ client”

lookmai 2003-09-25
  • 打赏
  • 举报
回复
我不知贴了多少次了....
VC肯定能调用VB的com,用VB写的com已经包含有自动化接口,方便各种脚本语言的调用.
VC调用VB写的com用多种办法.我只介绍其中两种(其实也是com通用的调用方法,一样可以调用ATL写的).
首先Create the Visual Basic Server.

Create a "testcom1" ActiveX DLL project. create a "testget" class
Add the following code to "testget":

Public Function loadPO(ByVal one As String, ByVal two As String) As String
loadPO = one & " and " & two
End Function

Compile the DLL as d:\testcom1.dll and exit Visual Basic.


一、前绑定,相当VB的Dim obj As New testcom1.testget
1.Visual C++6.0:File-->new-->Projects-->Win32 Application(project name)-->testcom3,就选第一项"An empty project"......
2.File-->new-->C++ Source File-->testcom3.输入以下内容到testcom3.cpp
//
#include "windows.h"
#include "testcom3.h"
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
CoInitialize(NULL);
_testget *pClass = NULL;
HRESULT hr=CoCreateInstance(CLSID_testget, NULL, CLSCTX_INPROC_SERVER, IID__testget, (void**)&pClass);
BSTR One=SysAllocString(L"first");
BSTR Two=SysAllocString(L"second");
BSTR Three;
hr = pClass->loadPO(One,Two,&Three);
char *p = _com_util::ConvertBSTRToString(Three);
MessageBox(NULL,p,"Access Check",MB_OK | MB_ICONINFORMATION);
SysFreeString(One);
SysFreeString(Two);
SysFreeString(Three);
pClass->Release();
CoUninitialize();
return 0;
}
//
3.Click OLE/COM Object Viewer on the Tools menu. Select View Typelib from the File menu and choose the testcom1.dll you created earlier. Click Open to display the ITypeLib Viewer, which contains the .idl file for your DLL.
4.Copy the contents of your .idl file (contents of the right pane) to the Clipboard. Hold the SHIFT key down while paging or scrolling from the first character to the end of the text in the pane. Press Ctrl+C to copy the marked text to the Clipboard.
5.Click New on Visual C++ File menu. Select Text File on the New dialog box, name the file testcom3.idl, and click OK.
6.A blank text file appears. Paste the data from the Clipboard into it and save the file.
7.Select Settings from the Project menu, expand the testcom3 and Source Files nodes of the tree view, and select testcom3.idl. Click the MIDL tab, enter testcom3.h in the "Output header file name" box, and click OK.
8.打开testcom3.idl,执行Build-->Compile testcom3.idl,在当前目录下生在testcom3.h和testcom3_i.c两个文件.
9.将testcom3_i.c加到Source Files,testcom3.h加入Header Files.
10.run.

二、后绑定,相当VB的set obj=server.createObject("testcom1.testget").采用VB的自动化接口.
1.Visual C++6.0:File-->new-->Projects-->Win32 Application(project name)-->testcom1,就选第一项"An empty project"......
2.File-->new-->C++ Source File-->testcom1.输入以下内容到testcom1.cpp
//
#include "windows.h"
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(L"testcom1.testget", &clsid);
IDispatch* pIDispatch=NULL;
CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch);
DISPID dispid;
OLECHAR FAR* szMemberName = L"loadPO";
pIDispatch->GetIDsOfNames(IID_NULL,
&szMemberName,
1,
LOCALE_SYSTEM_DEFAULT,
&dispid);
DISPPARAMS dispparams;
dispparams.cArgs=2; //two arguments
dispparams.cNamedArgs=0; //no named arguments
dispparams.rgdispidNamedArgs=NULL;
dispparams.rgvarg=new VARIANTARG[2]; //the arg array contains two variants
//REMEMBER: arguments in the rgvarg array are reversed in order,
//so the last method argument is rgvarg[0] !
dispparams.rgvarg[0].vt=VT_BSTR; //a BSTR
dispparams.rgvarg[0].bstrVal=SysAllocString(L"second"); //allocate the BSTR
dispparams.rgvarg[1].vt=VT_BSTR; //a BSTR
dispparams.rgvarg[1].bstrVal=SysAllocString(L"first"); //allocate the BSTR
VARIANTARG Result;
Result.vt= VT_BSTR;
//Result.
EXCEPINFO excep;
//argument error information
UINT uArgErr;
pIDispatch->Invoke(dispid,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&dispparams,
&Result,
&excep,
&uArgErr);
//if(Result.bstrVal=="hello")
char *p = _com_util::ConvertBSTRToString(Result.bstrVal);
MessageBox(NULL,p,"Access Check",MB_OK | MB_ICONINFORMATION);
SysFreeString(dispparams.rgvarg[0].bstrVal);
//delete the argument array
delete[] dispparams.rgvarg;
CoUninitialize();
return 0;
}
//
1方法效率高,是主流的使用方法,方法2的Invoke接口比较耗时.
内容概要:本文介绍了一个基于Python的滚动轴承故障诊断项目,采用迁移学习(TL)结合SqueezeNet网络(TL-SqueezeNet)实现智能诊断。项目通过将一维振动信号经短时傅里叶变换转化为二维时频图,输入改进的SqueezeNet模型进行训练与分类。模型利用预训练权重冻结骨干网络、替换分类头,并结合类别权重、数据增强、标签平滑和分阶段微调策略,提升小样本与类别不均衡条件下的诊断性能。系统实现了从原始信号读取、滑动窗口分段、时频图生成、数据集划分、模型训练评估到单文件推理的全流程自动化,支持CSV、TXT、NPY等多种格式,输出包括准确率、宏平均F1、混淆矩阵及各类别概率,增强了诊断结果的可解释性与工程实用性。; 适合人群:具备Python编程基础,熟悉PyTorch框架,从事工业设备故障诊断、信号处理或深度学习应用研究的研发人员、研究生及工程师(工作或研究年限1-3年)。; 使用场景及目标:①解决滚动轴承故障数据小样本、类别不均衡、工况多变导致的传统方法泛化能力差的问题;②构建轻量化、高精度、可部署于边缘设备的智能诊断模型;③实现端到端的自动化诊断流程,提升工业运维智能化水平;④通过可视化评估指标辅助人工复核与模型优化。; 阅读建议:此资源以实际项目代码为核心,强调工程实现与算法优化的结合,建议读者结合文档中的代码示例搭建环境运行,重点理解数据预处理逻辑、模型迁移策略与评估机制的设计思路,并尝试在自有数据上进行迁移与调优实践。
本资源提供重庆市2026年水系(线+面)空间分布数据,系统整理重庆市范围内河流、沟渠、水道、湖泊、水库等水系要素,包含可编辑MXD工程文件、标准Shapefile矢量文件以及标准成图TIF文件,可用于水文地理、水资源管理、生态环境及自然灾害等相关研究。 原始数据来源是Open Street Map(OSM),水系类型包括江、河、溪、水域、水库、河岸、河堤等等,可在shp文件属性表中自行查阅。 数据包含水系线和水系面两类矢量数据。线状水系用于表达河流、沟渠及其他线性水体的空间位置和形态;面状水系用于表达湖泊、水库及其他具有一定面积的水体分布,可较直观地反映重庆市河湖水系的空间格局。 标准Shapefile文件支持空间查询、属性编辑、长度与面积统计、河网密度分析、缓冲区分析及专题制图,可与行政区划、DEM、土地利用、人口、降水及灾害数据进行空间叠加。资源配套提供可编辑MXD工程文件,完成水系图层组织、符号配置、标注及地图版式设置,便于用户直接在ArcGIS中编辑和制图。 该数据可广泛应用于重庆市水资源管理、河湖空间格局研究、洪涝灾害分析、生态环境评价、流域研究及国土空间规划等领域,可为区域水系特征分析及相关GIS空间研究提供基础数据支撑。 同时提供标准成图TIF文件,可直接用于科研论文、项目报告、专题地图及教学展示。整体数据具有线面数据配套、空间分布直观、格式完整、GIS兼容性好等特点,可满足重庆市水系空间分析、专题制图及科研应用需求。

3,248

社区成员

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

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