我在vb中创建了一个动态连接库工程(active dll),生成一个.dll 文件,想在vc
引用,怎样实现???

解决方案 »

  1.   

    比如建立一个工程 TESTVB, 添加一个类模块名为 VBObj, 其中定义了两个函数:Public Sub Test1()
        MsgBox "This is a Test"
    End SubPublic Function Test2(ByVal var1 As Long, ByVal var2 As Long) As Long
        Test2 = var1 + var2
    End Function编译产生 TestVB.Dll , 你可以用 OLE/COM Object Viewer 察看对应的 idl 定义,在测试程序中这样使用:
    #include <windows.h>
    #include <iostream>
    using namespace std;#import "F:/LLBak/VBProj/TESTVB.dll" no_namespacevoid main()
    {
    ::CoInitialize( NULL ); _VBObjPtr obj( TEXT("TESTVB.VBObj") );  obj->Test1();
    cout << obj->Test2( 100 , 200 ) << endl;
    obj.Release(); ::CoUninitialize();
    }
      

  2.   

    注意 VB 和 VC 中数据类型的对应,VB缺省的参数定义为 ByRef 的,也就是传递地址,如:Public Function Fun( a As Long ) As String 对应的 idl 标示为:HRESULT Fun( long* a , [ out ,retval ]BSTR * strRet );如果你的VB模块要在 VC中使用,你应该尽量的避免使用 VARIANT 数据类型,虽然在VB中用起来很方便