DLL 中怎么返回一个 CString 的值?

馋嘴蜗牛 2002-02-09 09:03:10
我的 DLL 中的一个函数的返回类型是 CString,但我在调用的时候出错,不错出在什么地方。
有没有别的方法来返回字符串呢?
...全文
211 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eason 2002-02-10
  • 打赏
  • 举报
回复
好像用dll返回CString有错,用debug版本的dll吧
我以前也用过,后来不用CString,改用char*了
no_limit 2002-02-10
  • 打赏
  • 举报
回复
想返回CSTRING,你必须得用扩展DLL,看看你最开始时选的肯定是标准DLL了!!!
馋嘴蜗牛 2002-02-10
  • 打赏
  • 举报
回复
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
馋嘴蜗牛 2002-02-10
  • 打赏
  • 举报
回复
谁能详细说一说 char* 怎么代替 CString,就是说,我有一个 CString 的变量,把它放到 char* 里
congling 2002-02-09
  • 打赏
  • 举报
回复
你只要在DEF文件内写输出函数一般没事。
思沅 2002-02-09
  • 打赏
  • 举报
回复
我也出过类似的问题
在DLL的导出函数中,函数参数不能为数组
如:
DWORD DoString(CByteArray aByte)
{
return 0L;
}
调试跟踪到return后的大括号时就出错(估计也是析构的问题)
但这个函数放到DLL外部后执行得析构都没有问题
congling 2002-02-09
  • 打赏
  • 举报
回复
我测试了一下,是没有问题的。
馋嘴蜗牛 2002-02-09
  • 打赏
  • 举报
回复
那我先装一个 SP5,我好象已经装了,明天再来看帖子
WingfireWu 2002-02-09
  • 打赏
  • 举报
回复
是不是什么类在析构的时候出错了??
也可能是VC的Bug,装个VSSP5试一试看!!
馋嘴蜗牛 2002-02-09
  • 打赏
  • 举报
回复
对呀,我看方法也没错,而且 MessageBox 出来的东东也是对的,一直跟踪到 FreeLibrary(hDLL) 都没错,只是到了最后最后一个大括号时出错,你说怪吧
WingfireWu 2002-02-09
  • 打赏
  • 举报
回复
好像方法没有错,你能保证你的DLL被载进来了,DoString不为NULL吗??
馋嘴蜗牛 2002-02-09
  • 打赏
  • 举报
回复
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);
}
}
WingfireWu 2002-02-09
  • 打赏
  • 举报
回复
见CComBSTR或者是bstr_t,只是所用的库不同而已。
我觉得干脆这样
CString *pstrReturn = new CString("temp");
return LPVOID(pstrReturn);

然后在调用方
CString *pstrString = (CString *) lpvReturn;
delete pstrString;
馋嘴蜗牛 2002-02-09
  • 打赏
  • 举报
回复
我已经准备好了我要返回的 CString 的字符串了,我怎么把它放到 BSTR 里呢?
不好意思,我对 VC 里的字符串操作不太熟,但又要老用到:(
WingfireWu 2002-02-09
  • 打赏
  • 举报
回复
1》返回CString*
2》 定义函数 int GetString(char* lpszString, int iBufferLen);
3》 返回BSTR

16,472

社区成员

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

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

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