问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在vc中怎样调用vb做的ActiveX DLL控件

发布网友 发布时间:2022-05-06 19:56

我来回答

2个回答

热心网友 时间:2023-08-19 16:30

1、运行VC 6.0,使用MFC程序向导创建一个新的基于对话框的MFC应用程序。
2、使用#import导入服务组件,拷贝PRJADO.DLL到VC工程目录,打开STDAFX.H文件增加如下代码:
# import "prjado.dll"
using namespace prjado;
这段代码应该放置在:
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately 之后和#endif 之前。
在stdafx.h文件导入dll能够让编译器在运行时连接dll的类型库,#import它能够自动产生一个对GUIDs的定义,同时自动生成对clsado对象的封装。同时能够列举它在类中所能找到的类型, VC++会在编译的时候自动生成两个文件:
一个头文件(.tlh),它包含了列举的类型和对类型库中对象的定义;
一个实现文件(.tli)对类型库对象模型中的方法产生封装。
Namespace(名字空间)用来定义一个名字空间,使用unsing就可以将当前的类型上下文转换名字空间所定地,让我们可以访问服务组件的方法。
如果我们修改了服务组件程序,建议删除这两个文件后重新完整编译工程,以便让编译器重新列举类的属性以及函数。
3、在对话框中新添加一按钮,标题设为“测试”。双击“测试”按钮,系统提示新建一函数OnButton1对应于该按钮的CLICK事件。OnButton1函数的具体代码如下
HRESULT hresult;
CLSID clsid;
CoInitialize(NULL);
//初始化COM接口
hresult=CLSIDFromProgID(OLESTR("prjado.clsado"), &clsid);
//得到组件的CLSID
_clsado *t;
//这就是我们在PRJADO.DLL中定义的类
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_clsado),(LPVOID *) &t);
初始化CLSADO,CoCreateInstance()的第一个参数是对象的CLSID(类代码),这个128位的编码唯一地标识了组件服务,它的路径和运行参数等信息都放在系统注册表中;第二个参数一般情况下设为NULL;第三个参数用来指明对象的运行环境,如远程或本地,此处设为CLSCTX_INPROC_SERVER,标明是服务组件是一个DLL;第四个参数指明用来与对象通信接口的ID,这也是一个128位的编码;第五个参数是用来接收对象的接口指针。
if(FAILED(hresult))
{
AfxMessageBox("初始化服务组件失败");
return;
}
//如果初始化失败,弹出提示对话框后退出程序
t->ado_Init() ;
//调用初始化函数
t->ado_add("从VC调用组件") ;
//调用增加记录函数
t->ado_UnInit ();
//调用关闭连接函数
t->Release();
//释放接口指针
CoUninitialize();
// 关闭COM库的联接
AfxMessageBox("调用服务组件完成");
保存工程后编译运行VC 程序,点击“测试”按钮,等待完成提示后,我们打开数据库就可以看到刚才添加的记录了。
总结:
综上所述,在实际的应用程序开发中,利用组件技术,我们可以进行VC和VB混合编程,充分地发挥开发工具的优势,可以很好地加快软件的开发进度,并且极大的改善程序的可维护性和可用性。

热心网友 时间:2023-08-19 16:31

将这部分与j88r发的内容结合使用,不然初始化组件会失败
HRESULT hr = CoInitialize(NULL); //初始化COM
//装载ActiveX控件
HINSTANCE hLib = LoadLibrary(_T("SMtest.dll")); //替换你的DLL文件
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
cout<<"不能载入Dll文件!"<<endl;
return FALSE;
}
//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");
//调用注册函数DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
cout<<"调用DllRegisterServer失败!\r\n如果是在Vista中运行:\r\n请右击程序,选择“以管理员身份运行”即可"<<endl;
FreeLibrary(hLib);
};
cout<<lpDllEntryPoint<<endl;

}
else
{
cout<<"调用DllRegisterServer失败!"<<endl;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑分辨率设置多少合适笔记本电脑分辨率多少最佳 各尺寸笔记本电脑的最佳分辨率 2022年高考480到510分能上山东科技大学吗 朋友借了我一万块钱,现在坐牢了怎么还钱? 天王星和海王星虽然看似一对姊妹星,但还是有区别 ...值得收藏吗?现在分别只都多少钱,照片上有一个铜币的 谁能告诉我这是一枚什么样的铜币,值不值钱? 有谁知道这铜币值不值钱,懂家告诉我一下!谢谢 有谁知道这个铜钱的来历 可以进行异地公积金贷款吗 请问windows下DLL组件文件应该用什么打开方式查看或者什么软件? .net dll文件怎么用,是一个控件 鸡骨草根部能煲汤吗? 江苏福星机动车驾培有限公司怎么样? 如何调用dll形式的com控件? C#如何调用DLL控件? DLL动态链接库是什么啊?谢谢 了 如何利用dll文件制作成activex控件 记事本怎么替换标点符号 常用动态链接库的DLL有哪些? windows窗体应用控件库项目生成dll,无法在嵌入网页使用的问题。 四川达州地区有没有种植长裙竹荪的?今年2014年竹荪的市场前景怎么样?知道的朋友指点一下吧,谢谢 ActiveX控件和dll动态链接库是不是一回事,组件和控件有什么区别? 求福州可以打包带回家的特产 在C#的开发环境中,新建项目里的类库跟控件库有什么区别? dll控件怎样获取电脑硬件信息 c# 写好控件库dll文件之后怎么将此控件导入工具栏里? 请问下图是什么蘑菇,科普下信息,谢谢 姑妈有几个语素?? 精粹由几个语素构成? 无锡市城中驾培有限公司怎么样? 我是个大学生,职业规划该怎么写?有没有范文啊 江阴市澄江驾培有限公司怎么样? 帮你分析如何进行审计的职业规划 怎么能让小尾寒羊长得快有哪些偏方 审计毕业生职业规划怎么弄 喂什么饲料可以让羊长的比较快 什么药面能让羊长得快 关于我对未来的会计职业的规划:我是审计专业的大二学生,就读于一个二本院校 吃什么可以让羊长得最快..?怎样在最短的时间内让羊长最多的肉..? 刚毕业作为一个初入会计事务所的审计员,怎么样有个好的未来五年的人生规划? 2014年应届审计专业学生,以后想从事内审工作,该如何规划 什么羊长的最快最大? 冰种翡翠要比糯种翡翠凉吗? 用微信扫不出产品的条码信息,这样东西是不是假的 冰种翡翠带在身上是不是一直都是冰的啊 冰种翡翠戴在手上是不是很冰? 冰种翡翠是不是看上去冰冰透透的 老年机自己设的密码忘了怎么办?谢谢!怎么办 你好!逾期会怎样