如何在DLL中使用Systems::IO::Ports进行设置,以便可以从loadlibrary函数调用它
使用vc2012 express c++ 我对运行时库是如何工作的有点困惑,但我需要从我拥有的一些硬件中为驱动程序创建一个库,以便它可以在SDK中使用 我的源代码如下如何在DLL中使用Systems::IO::Ports进行设置,以便可以从loadlibrary函数调用它,dll,c++-cli,Dll,C++ Cli,使用vc2012 express c++ 我对运行时库是如何工作的有点困惑,但我需要从我拥有的一些硬件中为驱动程序创建一个库,以便它可以在SDK中使用 我的源代码如下 #include "PhantomAdapter.h" #include <stdexcept> int ready() { //return Comms::SerialPort::check(); return 1; } int open() { int flag=0;
#include "PhantomAdapter.h"
#include <stdexcept>
int ready()
{
//return Comms::SerialPort::check();
return 1;
}
int open()
{
int flag=0;
//flag=Comms::SerialPort::openPort();
return flag;
}
int close()
{
Comms::SerialPort::closePort();
return 1;
}
int angle(double& angle)
{
angle = Comms::SerialPort::read();
return 0;
}
int torque(double torque)
{
Comms::SerialPort::send((Byte)torque);
return 1;
}
namespace Comms
{
//static p1 = gcnew System::IO::Ports::SerialPort();
int SerialPort::openPort()
{
bool check=0;
p1 = gcnew System::IO::Ports::SerialPort();
p1->BaudRate = 57600;
p1->PortName = "COM3";
if(p1->IsOpen)
return 0;
else {
p1->Open();
return 1;
}
}
int SerialPort::check()
{
array<String^>^ serialPorts = nullptr;
bool flag = true;
serialPorts = p1->GetPortNames();
for each(String^ port in serialPorts)
{
if(port=="COM3")
flag= true;
}
return flag;
}
void SerialPort::closePort()
{
p1->Close();
}
void SerialPort::send(Byte data)
{
array<unsigned char>^ buffer = gcnew array<Byte>(1);
buffer[0] = (char)data;
p1->Write(buffer,0,1);
}
double SerialPort::read()
{
double data;
data = p1->ReadByte();
return data;
}
}
有人能告诉我正确的方向吗?我觉得serialPort类无法从运行库打开,除非我以某种方式导入它您已经注释掉了open port方法。您的p1将始终为空。在调用其他函数时,确保p1中有一个有效的对象。这仍然是C++/CLI,请下次记住这一点。您编写了大量代码,但不了解System::IO::Ports::SerialPort类的工作原理。遇到了一个基本问题,实际上还没有创建类的对象。最好扔掉它,它会给你带来更多的麻烦。从谷歌的某个地方开始工作,这样做是对的。谢谢,我想我会听从你的建议,我可以选择Soal::IO::PORT::SerialPoor上的任何教程吗?或者最好在运行时DLL中找到一个与标准应用程序不同的写的程序吗?你正在使用C++,最好使用任何优秀的C++串口库,比如Win32 API本身,而不是Bug混乱,这是代码>系统::IO::端口:SerialPosie<代码>
#define PHANTOMADAPTER_API __declspec(dllexport)
#else
#define PHANTOMADAPTER_API __declspec(dllexport)
#endif
#using <mscorlib.dll>
#using <system.dll>
using namespace System;
using namespace System::IO::Ports;
using namespace System::Threading;
extern "C" {
PHANTOMADAPTER_API int ready();
PHANTOMADAPTER_API int open();
PHANTOMADAPTER_API int close();
PHANTOMADAPTER_API int angle(double& angle);
PHANTOMADAPTER_API int torque(double torque);
}
namespace Comms
{
public ref class SerialPort
{
private:
static System::IO::Ports::SerialPort^ p1;
public:
static int openPort();
static void closePort();
static double read();
static void send(Byte data);
static int check();
};
}
System.NullReferenceException: Object reference not set to an instance of an object.
at System.IO.Ports.SerialPort.get_IsOpen()
at System.IO.Ports.SerialPort.ReadByte()
at angle(Double* angle)