P/Invokeを使用して文字列を返すVB.NetコードからC++関数を呼び出そうとしていますが、1文字のみを返しています。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()で割り当てられる必要があります。 –