dll 的调用:
其实不管你要调用的是你自己写的DLL,还是别人写的DLL,首先你要分清楚它是 ActiveX DLL,还是标准的DLL,因为它们在调用时是有区别的。
1、ActiveX DLL
要调用ActiveX DLL你必须要注册这个DLL(如果是用VB写的,在编译时自动会注册。否则可用Regsvr32.exe来注册。windows安装目录\system(如是NT则是system32)\Regsvr32 DLL的完整路径)
然后你可以在工程中引用该DLL。
再然后你就可以使用其中的类了。比如:dim clsXXXX as XXXX(该DLL中的类名)
2、标准DLL
标准DLL的使用和平时使用Windows API时是一样的。
你要使用该DLL中输出的函数,就必须在中对该函数进行声明。
比如:Public Declare Function DLL中的函数名 Lib 你的DLL的完整路径 Alias 函数别名(在此要区分大小写) (参数列表) As 返回类型

解决方案 »

  1.   

    1、的确先要搞清楚是标准DLL,还是ActiveXDLL,按你的情况应该是标准DLL,不需要注册
    2、因为你用了MFC,所以你写的DLL所依赖的DLL也必须要有
    3、VB只支持__Stdcall方式导出的函数
    4、DLL的位置放在应用程序目录中或是system或是system32
      

  2.   

    a simple demoVB pass string to VC
    Change the ByRef to ByVal in the Declare-statement. Sending it as a ByRef will send it as it is defined internally in VB. ByVal will send the actual string and not the internal struct (something like length + string). 
    Public Declare Sub DeReceiveStringFromVB Lib "MyVCDLL" ( _
           ByVal s1 As String, ByVal s2 As String)DeReceiveStringFromVB "aaa", "bbb"
        __declspec( dllexport )  void __stdcall DeReceiveStringFromVB(LPCSTR lp1,LPCSTR lp2)
        {
            std::stringstream stmp;
            stmp<<"ReceiveStringFromVB("<<lp1<<","<<lp2<<")";
            OutputDebugString(stmp.str().c_str());
        }
    VC pass string to VB
    __declspec( dllexport )  void __stdcall Long2String2(long lpdata,LPSTR pszString, LONG cSize) 
    {wsprintf(pszString,"%d",lpdata);
    }
    Private Declare Sub Long2String2 Lib "MyVCDLL" ( _
             ByVal pFunc As Long, ByVal sMyString As String, ByVal cBufferSize As Long)Dim sFillTest As String
    sFillTest = Space$(260)
    Long2String2 wParam, sFillTest, 260
      

  3.   

    那么怎么打包注册呢?应该放到哪个文件夹下呢,你说的我都实验了,
    我把dll放到应用程序路径下,和winsys路径下和win路径下全不行,
    我用的是VB自带的打包工具,
    请给出一个完整的解决方案好么?