VBNET创建COM类库供VB6和VC调用,出错了?

[复制链接]
查看11 | 回复2 | 2021-1-27 06:56:27 | 显示全部楼层 |阅读模式
本命题的目标:在VB.net创建函数,生成DLL,供VB.net、VB6、C++等调用。
在VB6中调用结果正确,但VC中调用结果错误!请大侠指点。
项目1:创建DLL(Com类库),步骤如下:
1、VS2005中,新建VB项目,选择类库(ClassLibrary)
2、打开项目资源管理器,删除刚才自动创建的Class.VB
3、在项目资源管理器中,右键,增加新项,选择“COM类库”(COMLibrary)。
VS2005将为你自动添加如下代码。
4、添加你自己的函数,如下框。
5、编译生成tlb和dll.
_
PublicClassComClass1
#Region"COMGUID"
'这些GUID提供此类的COM标识
'及其COM接口。若更改它们,则现有的
'客户端将不再能访问此类。
PublicConstClassIdAsString="c1525294-5128-4314-9e96-92a92180caf0"
PublicConstInterfaceIdAsString="e9c5016d-e768-4003-b3ec-38b218a99ec3"
PublicConstEventsIdAsString="ec65972a-da33-4c0d-a0b6-971fe6f2a0aa"
#EndRegion
'可创建的COM类必须具有一个不带参数的PublicSubNew()
'否则,将不会在
'COM注册表中注册此类,且无法通过
'CreateObject创建此类。
PublicSubNew()
MyBase.New()
EndSub
引用'仅此框内代码为手工添加,其它均为自动生成
PublicFunctionSumTest(ByValaAsInt16,ByValbAsInt16)AsInt16
Returna+b
EndFunction
PublicFunctionSumTest2(ByValaAsString,ByValbAsString,ByRefcAsString)AsBoolean
c=a+b
ReturnTrue
EndFunction

EndClass
‘=====================================================================
项目2:VB6调用

PrivateSubCommand1_Click()
DimmyCAsNewtestTLB.ComClass1
MsgBox"1+2="&myC.SumTest(1,2)
DimSAsString
DimrtAsBoolean:rt=myC.SumTest2("ABC","DEF",S)
MsgBoxS
EndSub

运行,结果正确!
项目3:C++调用
1、在VS2005中,新建MFC运用程序
2、项目-》类—》新建—》类型库中的MFC类,如下图
3、在以下对话框中
(1)选“文件”
(2)位置栏目选上面VB.net生成的Tlb文件。需要事先把testTLB.Tlb文件复制到当前项目路径下。
(3)接口栏目选“_ComClass1”
(4)“完成”。程序自动生成一个头文件。
4、调用引入的类

voidCTestTLBCallDlg::OnBnClickedButton1()
{
//TODO:在此添加控件通知处理程序代码
CComClass1*myC=newCComClass1();
intk=myC->SumTest(1,2);
BSTRC[64];
BOOLrt=myC->SumTest2(_T("ABC"),_T("DEF"),C);
}

问题:运行后返回的值k、C均错误?为何?如何改正?

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:56:27 | 显示全部楼层
http://jpkc1.szpt.edu.cn/build/jzjsjht/Uploadfiles/2012/test_COMDLL.ziphttp://jpkc1.szpt.edu.cn/build/jzjsjht/Uploadfiles/2012/test_COMDLL.zip
回复

使用道具 举报

千问 | 2021-1-27 06:56:27 | 显示全部楼层
项目文件下载:
http://jpkc1.szpt.edu.cn/build/jzjsjht/Uploadfiles/2012/test_COMDLL.zip
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行