我做了个DLL,在VB当中调用,现在想通过参数(lpResult)把结果传回VB,但是却不行。各位老大帮我看看,谢了!
extern "C" _declspec(dllexport) int  Check_Bank(LPTSTR lpBankCD, LPTSTR lpResult)
{
    
    try{
        LPTSTR sRetOK = "BankCD Exist";
        LPTSTR sRetFail = "BankCD didn't Exist";
        LPTSTR lpSql;
        ODynaset oDyna;
        lpSql = "select bank_cd from bank where bank_cd='0001'";
        oDyna.Open(datab,lpSql);
        if(oDyna.IsEOF())
        {
            SysReAllocStringLen((BSTR*)lpResult,(BSTR)sRetFail,strlen(sRetFail)); 
            return 0;
        }else
        {
            SysReAllocStringLen((BSTR*)lpResult,(BSTR)sRetOK,strlen(sRetOK));
            return -1;
        }
    }catch(...)
    {
        return 0;
    }
}

解决方案 »

  1.   

    如果可以用MFC
    用CString 就可以了。如果用SDK 
    用wchar * 就可以了如用C++
     用string 就可以了。
      

  2.   

    extern "C" _declspec(dllexport) int  Check_Bank(LPTSTR lpBankCD, char * lpResult)在vb中申明的时候注意一下!要能够带出参数的!肯定没有问题的!我以前就做过的!给你点信心吧
      

  3.   

    可能是VB中函数申明和调用的问题吧.举个例子:
    extern "C" _declspec(dllexport) int  Check_Bank(LPTSTR lpResult){
         strcpy(lpResult,"Hello,world!");
         return 0;
    }VB中申明
    Public Declare Function Check_Bank Lib "dll name" (ByVal strRet As String) As Long
    注意,这里的参数是传值(byval)方式,不是传引用(byref)方式.
    在vb 调用API 的时候,通过参数返回结构或者其它基本数据类型都是
    传引用,只有 String 是传值.String 类型的值应该就是它的地址.调用'注意给 String 分配足够的长度
    dim strReturn as String * 256
    dim nReturn as LongnReturn = Check_Bank(strReturn)