Working with c++ dll and wpf

Working with c++ dll and wpf

本文关键字:and wpf dll c++ with Working      更新时间:2023-10-16

我有带有头文件的c ++ dll。

#ifndef NETRRSWIN_H
  #define NETRRSWIN_H
enum ErrorType
  {
  COMM_OK            ,
  BAD_BAUD_RATE      ,
  PORT_ALREADY_OPEN  ,
  PORT_NOT_OPEN      ,
  OPEN_ERROR         ,
  WRITE_ERROR        ,
  READ_ERROR         ,
  CLOSE_ERROR        ,
  RWPARAMS_ERROR
  };
extern __declspec( dllexport ) char GetRxBuffer( unsigned char *TargetAddr, unsigned char *NumOfBytes );
extern __declspec( dllexport ) unsigned char GetByte(void);
extern __declspec( dllexport ) int  RxBufferBytesAvailable(void);
extern __declspec( dllexport ) void DiscardRxBytes( unsigned char MaxBytes );
extern __declspec( dllexport ) char LoadTxBuffer( unsigned char *SourceAddr, unsigned char NumOfBytes );
extern __declspec( dllexport ) char SetSysCommPort( char *COMname );
extern __declspec( dllexport ) char SetSysBaudRate( unsigned int BaudRate );
extern __declspec( dllexport ) char CloseSysCommPort(void);
extern __declspec( dllexport ) char ResetSysCommPort(void);
#endif

我将其导入到我的项目中(始终使用复制选项)。

此外,我已将这些方法从dll导入为:

 [DllImport("NetrRsWin.dll")]
        public static extern char GetRxBuffer(char TargetAddr, char NumOfBytes);
        [DllImport("NetrRsWin.dll")]
        public static extern char GetByte(string rva);
        [DllImport("NetrRsWin.dll")]
        public static extern int RxBufferBytesAvailable();
        [DllImport("NetrRsWin.dll")]
        public static extern void DiscardRxBytes(char MaxBytes);
        [DllImport("NetrRsWin.dll")]
        public static extern char LoadTxBuffer(char SourceAddr, char NumOfBytes);
        [DllImport("NetrRsWin.dll")]
        public static extern char SetSysCommPort(char COMname);
        [DllImport("NetrRsWin.dll")]
        public static extern char SetSysBaudRate(int BaudRate);
        [DllImport("NetrRsWin.dll")]
        public static extern char CloseSysCommPort();
        [DllImport("NetrRsWin.dll")]
        public static extern char ResetSysCommPort();

问题是,当我尝试使用SetSysCommPort打开端口时,出现此错误:

错误消息:在 NetrRsWin.dll 文件中找不到过程入口点

在 WPF 中使用 c++ dll 的最佳方法是什么?我也尝试加载 dll 作为参考,但它说它不是有效的 com 参考。

谢谢

C++中的Char*和C#中的char不是同一类型。因此,SetSysCommPort签名不正确。它应该是:

    [DllImport("NetrRsWin.dll")]
    public static extern char SetSysCommPort([MarshalAs(UnmanagedType.LPStr)]String COMname);

您还应该检查其他方法的签名。