我希望有人可以帮助我。我有一个名为LC4_Comm_Lib.dll的dll文件,该文件允许与设备进行通信,但是我试图在c#项目中使用它。老实说,我不知道这是否能正常工作,dll文件带有一个h文件。
/* ======================================================================================================================= INFO ======================================================================================================================= Title : LC4_Comm_Lib - Function that are writen for LC4 Author : Slobodan Milosevic Revision : 1.0.0.1 Date : 02.11.2015. ======================================================================================================================= CHANGE LOG ======================================================================================================================= 1.0.0.0 : Initial Release 1.0.0.1 : Brasil update2 ======================================================================================================================= */ #pragma once /// Added to enforce __cdecl calling convetion #define CALL __cdecl #ifdef LC4_COMM_LIB_EXPORTS #define COMMLIB_LC4_API __declspec(dllexport) #else #define COMMLIB_LC4_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif typedef struct LC4SystemInformation{ char CalibrationDate[64]; char Calibrationvalidity; char BSMInumber[64]; char LC4_fw[64]; char PL4_fw[64]; char PL4_checksum[64]; }LC4SystemInformation, *ptrLC4SystemInformation; /* open usb communication */ long COMMLIB_LC4_API Open_USB_Comm(); /* open wifi communication */ long COMMLIB_LC4_API Open_WiFi_Comm(const char* ipAddress); /* set encryption key */ long COMMLIB_LC4_API Set_Encryption_Key(const char* key); /* decrypt encrypted file */ long COMMLIB_LC4_API Decrypt_File(const char* encryptedFilePath, const char* _decryptedFilePath); /* create list of files */ long COMMLIB_LC4_API Create_Available_File_List(int type, const char* time, const char* listPath); /* get file from device */ long COMMLIB_LC4_API Get_File(const char* Lc4_Path, const char* pc_Path, bool encFlag); /* close communication whith LC4 device */ void COMMLIB_LC4_API Close_Comm(); /* power off LC4 device */ long COMMLIB_LC4_API Power_Down(); /* get system information */ long COMMLIB_LC4_API Get_SysInfo(ptrLC4SystemInformation sysInfo); /* set settings path */ void COMMLIB_LC4_API Set_Settings_Path(const char* errorFilePath); /* get error code*/ long COMMLIB_LC4_API Get_Error_Code(); /* get error string*/ size_t COMMLIB_LC4_API Get_Error_String(char* errStr); /* get current file progres - for downloaded file */ size_t COMMLIB_LC4_API Get_File_Progress(); /* get size of file */ size_t COMMLIB_LC4_API Get_File_Size(); /* Serial Number */ int COMMLIB_LC4_API cmd_GetLidarSerialNo(char *); #ifdef __cplusplus } #endif
我已经可以在C ++项目中进行通信,但是我想知道是否有可能使其在我的C#项目中工作(猜测而不使用h文件)。我已经尝试使用DLLImport进行很多操作,甚至通过引用将其添加,也]
[DllImport("LC4_Comm_Lib.dll", CallingConvention = CallingConvention.Cdecl)]
我不确定我是否在浪费时间,所以以为我会仔细检查
我希望有人可以帮助我。我有一个名为LC4_Comm_Lib.dll的dll文件,该文件允许与设备进行通信,但是我试图在c#项目中使用它。老实说,我不知道这是否可以工作...
您可以使用C#代码使用C ++ DLL,而无需使用.h文件。首先,您必须执行DLL导入。在这里,我正在创建一个MFCdllConnector类来执行该操作。
class MFCdllConnector { [DllImport( "LC4_Comm_Lib.dll", CallingConvention = CallingConvention.Cdecl ) ] public static extern <your exporting function> //please find below example public static extern int MyExampleExportFunction([MarshalAsAttribute(UnmanagedType.LPStr)]string para1, [MarshalAsAttribute(UnmanagedType.LPStr)] string para2,[MarshalAsAttribute(UnmanagedType.LPWStr)] ref StringBuilder output); } //You can call this function like below int return = MFCdllConnector.MyExampleExportFunction(para1, para2, ref OUTPUT);