以下のコードでは、pcp_Out はシステム日付を ANSI 形式で返すことになっています。
システム日付が返されますが、前にジャンク文字がありますか?
AllocHGlobal は IntPtr を初期化する正しい方法ですか?
[DllImport("Open32env.dll", CharSet = CharSet.Ansi, ExactSpelling = false, EntryPoint = "CallOPLFunction", CallingConvention = CallingConvention.StdCall)] static extern int CallOPLFunction(long pl_Instr, IntPtr pcp_In, out IntPtr pcp_Out, out IntPtr pcp_ErrorMessage); static void Main(string[] args) { IntPtr OutPtr = Marshal.AllocHGlobal(0); IntPtr ErrorPtr = Marshal.AllocHGlobal(0); IntPtr inPtr = Marshal.StringToHGlobalAnsi(""); long invalue = 0; int ret = CallOPLFunction(invalue, inPtr, out OutPtr, out ErrorPtr); string Outstring = Marshal.PtrToStringAnsi(OutPtr,30); Marshal.FreeHGlobal(OutPtr); Marshal.FreeHGlobal(ErrorPtr); Marshal.FreeHGlobal(inPtr); }
出力
Outstring = "h\0Qr\0\0\0\0Ä<g\a?\004/22/13 10:25"