问题介绍:
我需要通过提供DLL文件、LIB文件和C头文件的API来控制某个设备,这些函数被声明为dllimport。
在使用C++项目中的API时一切都很顺利——我包含了头文件、LIB、DLL,并按照头文件中的声明调用了函数。
但是,当尝试从C#.NET项目中使用[DllImport]属性调用这些函数时,问题就开始了:函数被声明为具有精确名称和参数,运行代码时没有抛出任何异常。然而,设备完全没有响应,就好像这些函数实际上从未被调用过一样。
以下是在C头文件中的声明方式:
int __declspec(dllimport) Init_Card_RTx(unsigned short device_num, unsigned short enabled_channels, unsigned short xmt_channels);
C# 中如何声明:
[DllImport(Path, CallingConvention = CallingConvention.Cdecl, EntryPoint = "Init_Card_RTx")]
public static extern int Init_Card_RTx(UInt16 device_num, UInt16 enabled_channels, UInt16 xmt_channels);
问题:
- 这是因为头文件中的函数被声明为dllimport吗?
- 如果是这样,我是否需要用C++函数包装DLL并声明为dllexport?
- C DLL可从C#访问需要哪些步骤?
- 在C#项目中,我需要同时包含LIB文件和DLL文件吗?而不仅仅是DLL文件本身?