从C#调用C#

我来自电气工程师背景,因此我的知识很少关于C#,DLL等….我想将c函数用于C#。 我知道有一些关于这个的post,但我找不到一个足够简单的post。

目前,我在USB端口上有C函数调用windows API来读/写。 首先创建.dll我需要头文件吗? 因为我将以下函数decleration函数放入标题中。 我在堆栈溢出和Internet上看到的示例只使用一个简单的.c文件,我可以摆脱头文件吗?

__declspec(dllexport) LMUSB_HANDLE __stdcall InitializeDevice(unsigned short usVID, unsigned short usPID, LPGUID lpGUID, BOOL *pbDriverInstalled); __declspec(dllexport) LMUSB_HANDLE __stdcall InitializeDeviceByIndex(unsigned short usVID, unsigned short usPID, LPGUID lpGUID, DWORD dwIndex, BOOL bOpenDataEndpoints, BOOL *pbDriverInstalled); __declspec(dllexport) BOOL __stdcall TerminateDevice(LMUSB_HANDLE hHandle); __declspec(dllexport) BOOL __stdcall WriteUSBPacket(LMUSB_HANDLE hHandle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long *pulWritten); __declspec(dllexport) DWORD __stdcall ReadUSBPacket(LMUSB_HANDLE hHandle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long *pulRead, unsigned long ulTimeoutMs, HANDLE hBreak); __declspec(dllexport) BOOL __stdcall Endpoint0Transfer(LMUSB_HANDLE hHandle, UCHAR ucRequestType, UCHAR ucRequest, USHORT usValue, USHORT usIndex, USHORT usLength, PUCHAR pucBuffer, PUSHORT pusCount); 

第二点,我需要在cpp文件中编写__declspec(dllexport)吗? 这里是cpp的一个函数:

 extern "C" __declspec(dllexport) BOOL PASCAL EXPORT TerminateDevice(LMUSB_HANDLE hUSB) 

我不知道“BOOL PASCAL EXPORT”是做什么的,这个代码是从家具项目中回收的。

最后,当DLL正确构建时。 我如何在C#项目中导入它? 我尝试了以下但没有成功:

 [DllImport("lmusbdll.dll")] 

我看到您可以使用右键单击项目并添加引用但Visual Studio弹出一条错误消息:

 A reference to "DLL path" could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. 

[编辑]

我尝试了以下解决方案 ,但是当我尝试在我的c#项目中引用头文件时。 我仍然收到无法引用该文件的消息。

您不需要头文件,但是您需要__declspec(dllexport)每个函数。 如果它是C ++(即.cpp文件),你需要extern“C”。

有一个名为depends.exe的方便程序,它允许您查看DLL并查看它导出的函数以及它是否依赖于任何其他DLL。 这可能就是你的DllImport失败的原因。