【发布时间】:2015-11-05 09:15:17
【问题描述】:
c++代码是
MSIPC_SDK LONG __stdcall Ms_IpcClient_CaptureImage(LONG nUserId, char *sFilePath,
int nPathLen, const char *sDiskPath = NULL);//sDiskPath example: "C: \\".
影响:拍摄快照
参数备注:
-
LONG nUserId: Ms_Ipc_Login()//登录成功后返回值 -
char *sFilePath: //录音文件保存目的地 -
int nPathLen: //路径长度 -
const char *sDiskPath = NULL: //要保存哪个磁盘
我的 C# 代码是:
[DllImport("MsIpcSDK", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern int Ms_IpcClient_CaptureImage(
int lUserID,
[MarshalAs(UnmanagedType.LPStr)]
string sFilePath,
int nPathLen,
[MarshalAs(UnmanagedType.LPStr)]
string sDiskPath
);
并使用is方法:
var ret = Ms_IpcClient_CaptureImage(loginID, "C:\\a.bmp", 10000, "C:\\");
它在 .Net Framework 2 中工作,但在 .Net Framework 4 中不起作用。 如何在 .Net Framework 4 中修复它?
【问题讨论】:
-
定义“不工作”。什么不起作用?你得到一个编译错误?什么样的错误?
-
在.net 4中使用方法时显示停止工作(问题导致程序停止正常工作)并关闭程序
-
您是否尝试调试您的程序以查看它到底在哪里失败?您是否确保将参数正确传递给函数? LoginID 有效吗?你试过
@"C:\a.tmp"而不是"C:\\a.tmp"吗?你试过用CharSet = CharSet.Default吗? -
@LightBulb
@"C:\a.tmp" == "C:\\a.tmp"和CharSet = CharSet.Default在 Windows 上等价于CharSet.Ansi,并且在任何情况下每个文本参数都有MarshalAs(UnmanagedType.LPStr),所以CharSet的值实际上是无关紧要的。你似乎在猜。