繁体   English   中英

NET 4.0与DLL一起使用时出现未知错误

[英]Unknown error when using .NET 4.0 with dll

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中修复它?

sFilePath用于将字符串从被调用方传递给调用方。 这就是为什么类型是char*而不是const char*的原因,这就是为什么有一个用于缓冲区长度的参数的原因。 这意味着您需要使用StringBuilder而不是string p /调用应为:

[DllImport("MsIpcSDK", CharSet = CharSet.Ansi, 
    CallingConvention = CallingConvention.StdCall)]
public static extern int Ms_IpcClient_CaptureImage(
    int lUserID, 
    StringBuilder sFilePath, 
    int nPathLen,
    string sDiskPath
);

呼叫应该是:

var filePath = new StringBuilder(260);
var ret = Ms_IpcClient_CaptureImage(loginID, filePath, filePath.Capacity, "C:\\");

您的代码一直以来都是错误的,直到现在您一直在不理会它。 您通过了一个组合的缓冲区长度值10000的事实应该设置了警报铃声!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM