我想從VB.Net代碼中調用C++函數,它返回使用P/Invoke的字符串,但它只返回單個字符。從C++函數返回字符串到VB .net
C函數聲明
extern "C" __declspec(dllexport) LPSTR Get_GetDescription(HANDLE)
C函數定義
LPSTR Get_GetDescription(HANDLE resultBreakDown){
return LPSTR(((CalcBreakDown*)resultBreakDown)->GetDescription().c_str());
}
VB.Net代碼
<DllImport("FeeEngineDll.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function Get_GetDescription(ByVal resultBreakDown As IntPtr, ByVal indexSubs As Integer, ByVal indexLine As Integer) As <MarshalAsAttribute(LPStr)> String
End Function
返回類型或編組有沒有問題?
兩者。 C++代碼基本上被破壞,它返回一個懸掛指針。此外,這是Vista和Win7中的硬件崩潰,作爲函數返回返回的字符串緩衝區必須使用CoTaskMemAlloc()進行分配。 –