【发布时间】:2011-05-25 21:00:07
【问题描述】:
如何在 C# 中访问 C++ DLL 的函数
以下是 DLL 的原型:
NOMANGLE int CCONV SSPSendCommand (SSP_COMMAND * cmd, SSP_COMMAND_INFO * sspInfo);
NOMANGLE int CCONV OpenSSPComPort (SSP_COMMAND * cmd);
NOMANGLE int CCONV OpenSSPComPort2 (SSP_COMMAND * cmd);
NOMANGLE int CCONV OpenSSPComPortUSB (SSP_COMMAND * cmd);
NOMANGLE int CCONV CloseSSPComPort (void);
NOMANGLE int CCONV CloseSSPComPort2 (void);
NOMANGLE int CCONV CloseSSPComPortUSB (void);
NOMANGLE int CCONV DownloadFileToTarget (char * szFilename, int cPort, unsigned char sspAddress);
NOMANGLE long CCONV GetRamDownloadStatus (RAM_UPDATE_STATUS * rmData);
NOMANGLE int CCONV SetPortCloseOption (unsigned int md);
NOMANGLE int CCONV OpenCCTComPort (int PortNumber);
NOMANGLE int CCONV CloseCCTComPort (void);
NOMANGLE int CCONV CCTSendPacket (unsigned char * pkt, unsigned char * length);
在 C# 中我正在尝试这个:
[DllImport ("ITLSSPProc.dll")]
private extern static IntPtr SSP_COMMAND ();
[DllImport ("ITLSSPProc.dll")]
private static extern int OpenSSPComPort (SSP_COMMAND smd);
但它给了我一个错误。我究竟做错了什么?提前致谢
【问题讨论】:
-
NOMANGLE 宏是 extern "C" ?
-
至少有一个错误是
SSP_COMMAND不是函数。它是一种类型。[DllImport]只导入函数。 -
SSP_COMMAND 是一个结构,而不是一个函数。您必须声明该结构,然后将参数声明为“ref SSP_COMMAND”。