Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C++ DLL和WPF工作 我有C++文件,带有头文件< /p> #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_C++_Dll_Reference_Serial Port - Fatal编程技术网

用C++ DLL和WPF工作 我有C++文件,带有头文件< /p> #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

用C++ DLL和WPF工作 我有C++文件,带有头文件< /p> #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,c++,dll,reference,serial-port,C++,Dll,Reference,Serial Port,我使用“始终复制”选项将其导入到项目中 我还从dll中导入了这些方法 [DllImport("NetrRsWin.dll")] public static extern char GetRxBuffer(char TargetAddr, char NumOfBytes); [DllImport("NetrRsWin.dll")] public static extern char GetByte(string rva); [Dll

我使用“始终复制”选项将其导入到项目中

我还从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引用

谢谢>

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

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

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

您在.Net中的函数签名是错误的。例如char*和char。您自己创建了这些吗?我刚刚从头文件复制了它们,但即使我更改了它们,它仍然不起作用。您必须使用修饰名称,您可以通过dumpbin.exe/exports看到它们。使用CallingConvention属性,它看起来像Cdecl。在PINKEK声明中使用适当的类型。我认为这个问题与WPF完全无关,除非WPF有不同于Windows演示基金会的缩写词,我没有意识到。它必须是StringBuilder,而不是字符串。或者,您必须指定类似于[MarshalAsUnmanagedType.LPTStr]的内容。没错,我忘记了MarshalAs属性,但我不确定是否可以使用StringBuilder而不是字符串