C++写的DLL传递字符串数据给C#的纠结有关问题,请帮忙分析解决,多谢:)
C++写的DLL传递字符串数据给C#的纠结问题,请帮忙分析解决,谢谢:)
C#调用C++写的Dll。请教各位前辈如何实现Dll将字符串数据传递给C#呀? 谢谢
相关参数代码如下:
Dll(CDll.dll,Unicode编译模式)参数如下:
CDll.def的内容略。
在C#动态引入Dll的代码如下:
C#调用代码如下:
------解决方案--------------------
USES_CONVERSION;
LPWSTR pwStr=new wchar_t[result.GetLength()+1];
wcscpy(pwStr,T2W((LPCTSTR)result));
------解决方案--------------------
你看看API有这么传递字符串的么?
都是由调用着申请好内存,dll内直接赋值的。
------解决方案--------------------
你的dll直接这么赋值就行了
参考MSDN中类似的例子
C#调用C++写的Dll。请教各位前辈如何实现Dll将字符串数据传递给C#呀? 谢谢
相关参数代码如下:
Dll(CDll.dll,Unicode编译模式)参数如下:
CDll.def的内容略。
BOOL dllTest(
LPWSTR *s__out__Result, //需传递给C#字符串数据的双指针
LPCWSTR param1, //C#传入的参数
LPCWSTR param2 //C#传入的参数
)
{
CString result= func(param1, param2); //执行func函数,返回CString。
/*********************************************************
/*
/* 问题在这里?????????????????????????????????????????
/* 如何写代码才能将result (CString)变量的值通过*s__out__Result双指针传递给C#呀??谢谢。
/* 需考虑资源合理释放的问题。
/* 用双指针传递字符串数据合理么?谢谢
/*
/*********************************************************/
if(sResult.GetLength() >0)
{
return TRUE;
}
else
{
return FALSE;
}
}
在C#动态引入Dll的代码如下:
[DllImport(@"CDll.dll", CharSet = CharSet.Unicode, EntryPoint = "dllTest")]
[return: MarshalAs(UnmanagedType.Bool)]
public extern static bool dllTest(
[MarshalAs(UnmanagedType.LPWStr)]StringBuilder sbResult,
[MarshalAs(UnmanagedType.LPWStr)]string param1,
[MarshalAs(UnmanagedType.LPWStr)]string param2
);
C#调用代码如下:
StringBuilder sbResult = new StringBuilder();
string p1 ="中国程序员……";
string p2 ="非常优秀……";
boo b =dllTest(sbResult, p1, p2); //sbResult接收Dll传递的字符串数据
if(b)
{
MessageBox.Show(sbResult.ToString());
}
else
{
MessageBox.Show("调用Dll(dllTest)返回假!");
}
------解决方案--------------------
USES_CONVERSION;
LPWSTR pwStr=new wchar_t[result.GetLength()+1];
wcscpy(pwStr,T2W((LPCTSTR)result));
------解决方案--------------------
你看看API有这么传递字符串的么?
都是由调用着申请好内存,dll内直接赋值的。
------解决方案--------------------
你的dll直接这么赋值就行了
wcscpy(s__out__Result , result);
参考MSDN中类似的例子
int GetWindowText(
HWND hWnd, // Handle to window or control.
LPTStr lpString, // Text buffer.
int nMaxCount // Maximum number of characters to copy.