用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
我使用“始终复制”选项将其导入到项目中 我还从dll中导入了这些方法用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
[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引用
[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而不是字符串