关于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被重新使用艴值了。
[解决办法]
所在内存的值改变了,释放后被重新赋值所以就出现不是你要的值,所以要直接返回