永发信息网

C#调用一个C++的DLL,其中一个有问题,该如何写

答案:4  悬赏:50  手机版
解决时间 2021-02-04 01:16
  • 提问者网友:喧嚣尘世
  • 2021-02-03 19:56
初始的C++内头文件如下:

virtual bool __stdcall Open(USHORT portNumber, LPCTSTR ipAddr = NULL, bool fStartMonitorThread = true) = 0;

我改成了
[DllImport(@"F:\C_Product\PortScanTools\PortScanTool\PortScanTool\lib\PcomHwHDLCPort.dll", EntryPoint = "GetInterfaceList")]
public static extern Boolean Open(System.UInt16 portNumber, System.String ipAddr, bool fStartMonitorThread);

提示报错
改成
public static extern Boolean Open(ushort portNumber, string ipAddr, bool fStartMonitorThread);

也提示报错:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问下这个C#里面该怎么写?
最佳答案
  • 五星知识达人网友:佘樂
  • 2021-02-03 21:21
EntryPoint = "GetInterfaceList" 要么去掉要么改成 EntryPoint = "Open"
全部回答
  • 1楼网友:一叶十三刺
  • 2021-02-04 00:33

没有什么,很正常的呀。说不定你在第一次调用时那快内存正在使用中就会出现这种问题了

  • 2楼网友:轻雾山林
  • 2021-02-04 00:24
看看是__stdcall 还是__cdcall ,另外将string ipAddr,改为StringBuder
  • 3楼网友:第四晚心情
  • 2021-02-03 23:00
将ipAddr的类型改成StringBuder试试看。另外,有时候其他参数也许要加ref。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯