c123nANDY
c123nandy
2015-09-24 01:24

VC++如何调用C#编写的串口驱动 DLL

  • c#
  • c++
  • dll
  • 串口

最近弄一个串口打印的项目,我一直是用VC++进行开发的,c#没用过,但是对方提供的打印机的DEMO却是C#的例程,本来想着DLL是跨语言的,应该没什么问题,但是我用vc++编写了一个测试程序,确没有任何数据输出,很简单的例程,我按流程在上面加了打开串口,设置串口,发送数据,关闭串口。这几步都是用的现成的dll里面的函数,他把串口的数据操作也封装起来了,然后我就想到,在c#中是可以直接用库函数对串口读写,是不是因为这个原因,导致我在vc++中不能使用?

里面所有的都是用DLL提供的函数直接操作串口,但是就是没有串口数据输出。

注:打印机提供的C#的例程DEMO是可以正常串口打印的。

求大神解答。下面是我在vc++的窗初始化函数里写的流程。

 BOOL CTestDll2008Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);         // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    if (LoadPrintLib() == FALSE)
    {
        AfxMessageBox(_T("printdll.dll not found"));
        return FALSE;
    }

    ASCII_OpenPrinter(3);

    //ComState cs;
    //cs.dwBaudRate = 9600;
    //cs.Parity = NOPARITY;
    //cs.StopBits = ONESTOPBIT;

    DCB dcb;
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;

    ASCII_SetComPortParam(dcb);

    char pBuff[3] = { 0x1b,0x57,0x02};
    ASCII_DirectData(pBuff,3);
    char pBuff1[] = {"hello world"};
    ASCII_DirectData(pBuff1,10);
    pBuff[2] = 0x01;
    ASCII_DirectData(pBuff,3);
    ASCII_DirectData(pBuff1,10);

    ASCII_ClosePrinter();
    UnloadPrintLib();

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答