vc调用vb编写的dll库(求教)

onsize 2001-04-12 04:11:00
vc中调用vb编写的dll库:
dll库中的一个函数为:一个参数传入一个对象,经过数据处理后,另一个参数返回另一个对象。为什麽不能正确返回对象?
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
taolei 2001-04-13
  • 打赏
  • 举报
回复
运行结果是messagebox弹出"Class1",cls2的指针改变了。
taolei 2001-04-13
  • 打赏
  • 举报
回复
我按照你的方式写了一个程序,运行正常呀!一路都是S_OK,我把我写的程序贴出来,你对照一下
VB:
Project1
Class1.cls

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Class2.cls

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "Class2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Project2
Class3.cls

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "Class3"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Public Function xxx(cls1 As Class1, cls2 As Class2, Optional ByVal b As Boolean = False) As Boolean
MsgBox TypeName(cls1)
Set cls2 = New Class2
xxx = True
End Function


VC

#import "e:\\project1.dll"
#import "e:\\project2.dll"

::CoInitialize(NULL);
Project1::_Class1 *cls1;
Project1::_Class2 *cls2;
HRESULT hr;
Project2::_Class3 *cls3;
CLSID clsid;
hr = CLSIDFromProgID(L"Project1.Class1",&clsid);
hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Project1::_Class1),(void**)&cls1);
hr = CLSIDFromProgID(L"Project1.Class2",&clsid);
hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Project1::_Class2),(void**)&cls2);
hr = CLSIDFromProgID(L"Project2.Class3",&clsid);
hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Project2::_Class3),(void**)&cls3);
VARIANT_BOOL b = cls3->xxx(&cls1,&cls2,VARIANT_FALSE);


onsize 2001-04-12
  • 打赏
  • 举报
回复
vb 中函数定义
Lightning2中有clsRaws类、cFlashes 类
Locate中有clsLocate类
Public Function MixedCal(cRaws As Lightning2.clsRaws, cFlashes As Lightning2.clsFlashes, Optional ByVal Display As Boolean = False) As Boolean


VC 中函数调用

Lightning2::_clsRaws *Raws;
Lightning2::_clsFlashes *Flashs;
Locate::_clsLocate *Locate;

hresult= CLSIDFromProgID(OLESTR("Locate.clsLocate"),&clsid);
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Locate::_clsLocate),(LPVOID *) &Locate);

hresult= CLSIDFromProgID(OLESTR("Lightning2.clsRaws"),&clsid);
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Lightning2::_clsRaws),(LPVOID *) &Raws);

hresult= CLSIDFromProgID(OLESTR("Lightning2.clsFlashes"),&clsid);
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Lightning2::_clsFlashes),(LPVOID *) &Flashs);

MixCal=Locate->MixedCal(&Raws,&Flashs,FALSE); //传入Raws,返回Flashs。

taolei 2001-04-12
  • 打赏
  • 举报
回复
VB编译也可以带调试信息,你编译一个Debug版的VB dll,调试一下。你把VB和VC两边的函数定义和调用语句贴出来。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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