简体   繁体   English

在 c# 项目中使用 c++ dll

[英]Using a c++ dll within a c# project

I am hoping someone can help me.我希望有人能帮助我。 i have a dll file called LC4_Comm_Lib.dll which allows communication to a device, however im trying to use it in a c# project.我有一个名为 LC4_Comm_Lib.dll 的 dll 文件,它允许与设备通信,但是我试图在 c# 项目中使用它。 Honestly i am unaware if this will work at all, the dll file came with ah file老实说,我不知道这是否可行,dll 文件附带 ah 文件

    /*
=======================================================================================================================
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

I have got the communication to work in a C++ project however i was wondering if it is at all possible to get it to work in my c# project (guessing without the use of the h file).我已经让通信在 C++ 项目中工作,但是我想知道是否有可能让它在我的 c# 项目中工作(猜测不使用 h 文件)。 I have tried many things using DLLImport and even adding it through references, also我使用 DLLImport 尝试了很多事情,甚至通过引用添加它,也

 [DllImport("LC4_Comm_Lib.dll", CallingConvention = CallingConvention.Cdecl)]

I am not sure if i am wasting my time, so thought i would double check我不确定我是否在浪费时间,所以我想我会仔细检查

you can use C++ DLL in C# code without using your.h file.您可以在 C# 代码中使用 C++ DLL 代码,而无需使用 your.h 文件。 First of all you have to do DLL import.首先你必须做 DLL 导入。 Here i am creating a class MFCdllConnector to do the operation.在这里,我正在创建一个 class 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);

Hope this will help希望这会有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM