关于DLL动态库的问题

chenyang80425 2007-02-08 01:18:16
我设计了一个基于MFC AppWizard(dll->Regular Dll using shared MFC Dll的动态库.
试例代码如下://动态库代码
extern "C" __declspec(dllexport) char* Add(char* lpstr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString str;
str=lpstr;
/*
.....这里是一段字符串处理代码.
*/
lpstr=(char*)(LPCTSTR)str;
return lpstr;
}
C#代码:
[DllImport("DllDemo.dll")]
public static extern string Add(string s);

private void Page_Load(object sender, System.EventArgs e)
{
string s=(Add("输入结果"));
Response.Write("s="+s);
}
我遇到的问题是:如果在DLL中我把lpstr的值赋给了str,然后在转换成char* 类型返回,则C#中接收到的字符串是乱码.如果lpstr的值不赋给CString对象str,直接返回,则正常.为什么会这样呢?要怎样转换呢?
...全文
296 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyang80425 2007-02-08
  • 打赏
  • 举报
回复
请问要怎样直接返回?如何说是内在值变了而得不到正确的值,但为什么不把值赋给CString 对象,直接返回char*对象,能得到正确的值呀?
东文-桑晨 2007-02-08
  • 打赏
  • 举报
回复
所在内存的值改变了,释放后被重新赋值所以就出现不是你要的值,所以要直接返回
chenyang80425 2007-02-08
  • 打赏
  • 举报
回复
它为什么返回的是乱码呢?
chenyang80425 2007-02-08
  • 打赏
  • 举报
回复
不太明白楼上的意思,能说明白点吗?
碧螺春的马甲 2007-02-08
  • 打赏
  • 举报
回复
函数调用 Stack 原理 ...

传出的 lpstr=(char*)(LPCTSTR)str,

该 Add Fun 调用完毕后,Stack 回卷,分配在 stack中的 CString str 被释放,那块 memory被重新使用艴值了。
chenyang80425 2007-02-08
  • 打赏
  • 举报
回复
没有人知道吗?

16,472

社区成员

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

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

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