CString 转char[] 问题

Python这语言很强大,但是代码安全性及可视很差,做个界面很费时间,所以想到用MFC来做界面,但是 不能被Python直接调用,所以想出一个方法,通过C++ dll 调用MFC界面,但是主程序是Python,所以要返回的数据要很多,这样在调用时就得要用到实参传递,返回时,在CString 转 char[]时遇到了很大麻烦,传不回去。通过多方测试,发现仅memcpy实现在想要的结果,且要注意dlg.m_nInput.GetLength()+1,GetLength()是不包括‘\0’的。


int DLLTest(char dwgNo[],char pg[])
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	diag dlg;
	dlg.m_nOutput=pg;
	dlg.m_nInput=dwgNo;
    	dlg.DoModal();

	memcpy(dwgNo,dlg.m_nInput,dlg.m_nInput.GetLength()+1);
	memcpy(pg,dlg.m_nOutput,dlg.m_nOutput.GetLength()+1);
}

static PyObject* getpg(PyObject *self, PyObject *args)
{

	char* dwgNotemp;
	char* pgtemp;
	Py_Initialize();
	if ( !Py_IsInitialized())
	{  
		return Py_BuildValue("ss", "No","Init Error!");
	}
	if (!PyArg_ParseTuple(args, "ss",&dwgNotemp,&pgtemp))
		return Py_BuildValue("ss", "No","Init Error!");
	typedef int(*pMax)(char*,char*);
	HMODULE hdll;
	pMax Max;
	int e;
	hdll=LoadLibrary("MyDLL.dll");
    <span style="white-space:pre">	</span>if(hdll!=NULL)
    <span style="white-space:pre">	</span>{
		Max=(pMax)GetProcAddress(hdll,"DLLTest");
		if(Max!=NULL)
		{
			e=Max(dwgNotemp,pgtemp);
			if (e==0)
			{
				return Py_BuildValue("ss", "No","User Cancel!");
			}
			else
			{
				return Py_BuildValue("sss", "Yes",dwgNotemp,pgtemp);
			}
		}
		else
		{
			return Py_BuildValue("ss", "No","DoModal Error!");
		}
	}
	else
	{
		return Py_BuildValue("ss", "No","Get MFCdll Error!");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值