C#加载C++动态链 时 IntPtr 参数 问题

        [System.Runtime.InteropServices.DllImport("Sign64.dll", CharSet = CharSet.Auto)]
        public static extern uint Sign(IntPtr src, int srcLen, IntPtr sign, ref int signLen,
                                    [In] [MarshalAs(UnmanagedType.LPStr)] string pwd);
                                    
                                    
                                    
                                    
    ////////////////////////////////////////////////////////////                                
                                    
            var inputMsg = System.Text.Encoding.Default.GetBytes(message.Text);
            var inputMsgPtr = Marshal.AllocHGlobal(inputMsg.Length);
            Marshal.Copy(inputMsg, 0, inputMsgPtr, inputMsg.Length);


            var outputMsg = new byte[128];            
            var outputMsgPtr = Marshal.AllocHGlobal(outputMsg.Length);
            Marshal.Copy(outputMsg, 0, outputMsgPtr, outputMsg.Length);


            int outputLen = 0;

            var res = CEBSign.SignClient.Sign(inputMsgPtr,
                                              inputMsg.Length,
                                              outputMsgPtr,
                                              ref outputLen,
                                              password.Text);

image.png

image.png

阅读 1.5k
1 个回答

1, C#的项目不是64位的。


如图所示,Solution是x64不代表Project是x64。请确保c#项目是x64或AnyCPU且没有勾选Prefer 32bit。

2,C++的dll不是64位的。
可以使用dll denpendency查看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进