c# - C# 上的 DllImport

标签 c# dllimport

如何在 C# 中访问 C++ DLL 的函数

以下是 DLL 的原型(prototype):

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);

但它给我一个错误。我究竟做错了什么?提前致谢

最佳答案

至少有一个错误是 SSP_COMMAND 不是函数。是一种类型。 [DllImport] 只导入函数。将其视为不透明的 IntPtr 或为其创建适当的 struct 表示。

将其用作不透明的 IntPtr:

[DllImport ("ITLSSPProc.dll")]
private static extern int OpenSSPComPort (IntPtr smd);

要使用结构,请参阅 Passing Structures来自 MSDN 并在 C# 中定义一个 struct SSP_COMMAND。 (此链接包含开始所需的一切,包括相关示例)。

快乐编码。

关于c# - C# 上的 DllImport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130877/

相关文章:

c# - 在输入流关闭之前无法执行进程

c# - 我的带有字符串编码(marshal)处理的 LogonUser 的 DLLImport 有什么问题? [C#]

c++ - 并非所有函数都使用 dllexport 导出

c# - 将 C# 字符串数组传递给 C++ DLL 并在那里进行修改

c# - 在 ASP.NET MVC 的局部 View 中确定当前 View 的名称

c# - 获取随机颜色

c# - 我如何断言一个字符属于预期值列表?

c# - 计算数据表中的正值

c# - 从 DLL 调用函数?

c# - DllImport 装饰名称问题 - 无法找到入口点