1》返回CString*
2》 定义函数  int GetString(char* lpszString, int iBufferLen);
3》 返回BSTR

解决方案 »

  1.   

    我已经准备好了我要返回的 CString 的字符串了,我怎么把它放到 BSTR 里呢?
    不好意思,我对 VC 里的字符串操作不太熟,但又要老用到:(
      

  2.   

    见CComBSTR或者是bstr_t,只是所用的库不同而已。
    我觉得干脆这样
    CString *pstrReturn = new CString("temp");
    return LPVOID(pstrReturn);然后在调用方
    CString *pstrString = (CString *) lpvReturn;
    delete pstrString;
      

  3.   

    DLL 里的函数:
    CString DoString(CString const strString)
    {
    return (strString);
    }
    调动的程序里的函数:
    {
    CString strName, strResult;
    typedef CString StringFunc(CString const strString); HINSTANCE hDLL;
    EncryptFunc *DoString;
    hDLL = LoadLibrary("DoString");
    if (hDLL != NULL)
    {
    DoString = (StringFunc *)GetProcAddress(hDLL, "DoString");
    strName = "Songbai";
    strResult = DoString(strName);
    AfxMessageBox(strResult);
    FreeLibrary(hDLL);
    }
    }
      

  4.   

    好像方法没有错,你能保证你的DLL被载进来了,DoString不为NULL吗??
      

  5.   

    对呀,我看方法也没错,而且 MessageBox 出来的东东也是对的,一直跟踪到 FreeLibrary(hDLL) 都没错,只是到了最后最后一个大括号时出错,你说怪吧
      

  6.   

    是不是什么类在析构的时候出错了??
    也可能是VC的Bug,装个VSSP5试一试看!!
      

  7.   

    我也出过类似的问题
    在DLL的导出函数中,函数参数不能为数组
    如:
    DWORD DoString(CByteArray aByte)
    {
      return 0L;
    }
    调试跟踪到return后的大括号时就出错(估计也是析构的问题)
    但这个函数放到DLL外部后执行得析构都没有问题
      

  8.   

    你只要在DEF文件内写输出函数一般没事。
      

  9.   

    好像用dll返回CString有错,用debug版本的dll吧
    我以前也用过,后来不用CString,改用char*了
      

  10.   

    谁能详细说一说 char* 怎么代替 CString,就是说,我有一个 CString 的变量,把它放到 char* 里
      

  11.   

    BOOL Encrypta(char *in, char *out)
    {
    while (*in != '\0')
    {
    char szByte[32] = "";
    sprintf(szByte, "%02x", (*in ^ 101) & 0xff);
    strcat(out, szByte);
    in ++;
    }
    return true;
    }好啦,各位,怪我,是一个没有帖上来的句子错了,是那句 sprintf
      

  12.   

    想返回CSTRING,你必须得用扩展DLL,看看你最开始时选的肯定是标准DLL了!!!