首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于DLL动态库的有关问题

2012-03-09 
关于DLL动态库的问题我设计了一个基于MFCAppWizard(dll- RegularDllusingsharedMFCDll的动态库.试例代码

关于DLL动态库的问题
我设计了一个基于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,直接返回,则正常.为什么会这样呢?要怎样转换呢?


[解决办法]
函数调用 Stack 原理 ...

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

该 Add Fun 调用完毕后,Stack 回卷,分配在 stack中的 CString str 被释放,那块 memory被重新使用艴值了。
[解决办法]
所在内存的值改变了,释放后被重新赋值所以就出现不是你要的值,所以要直接返回

热点排行