VC++如何调用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个回答

用串口调试助手,看你的程序和C#的发送接收的有什么不同。检查你的波特率、校验、同步等设置,端口号

c123nANDY
c123nandy 我用VC++写的程序就没有任何输出,而且我看了一下,我用的COM3,但是当运行另外一个COM3的串口时,并没有出现串口被占用的情况,说明串口都没有被打开,所以我怀疑是不是C#对串口使用库函数进行操作的封装,在VC++是不是用不了
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vc调用C#编写的DLL
用VC调用C#编写的DLL,编译时将DLL放在程序同一目录
如何调用vc编写的DLL
我在VC中编写了一个函数rnextern "C" rnBOOL WINAPI GetRegDeclareNo(char* in_softName,char* out_regLockStr);rn/***函数说明:传进软件名in_softName,用一个字符串空间out_regLockStr来存放结果**/rn我在VC中调用测试成功.rn但我要在DELPHI该如何调用能rn
vc编写的dll如何调用
vc中用.def文件导出的函数,函数为rnrnvoid Msg1(char *p)rnrn char *buf = p ;rn for(int i=0;i<9;i++)rn buf[i]='9';rn buf[i] = '\0' ; rn rnrnvoid Msg2(UCHAR *p)rnrn UCHAR *buf = p ;rn for(int i=0;i<9;i++)rn buf[i]='9';rn buf[i] = '\0' ; rnrn如何调用Msg1和Msg2呢?
如何调用VC编写的DLL
本人在ASP中调用VC编的DLL时总是有问题,无法获得DLL的句柄,不知是何缘故,如何解决,谢谢各位大侠的指点
用VC编写dll,如何调用dll
用vc编写dll动态链接库,如何调用动态链接库。
调用VC编写的DLL
有一个其他人用VC写得dll:vcwfs.dll.没有源代码,在VB中声明如下:rnPublic Declare Function VCGetDoc Lib "vcwfs.dll" (ByVal intNumber As Integer, ByVal strData As String) As Longrn在VB程序中调用如下:rnstrTextAll = " "rnrc = VCGetDoc(gintZwYear, strTextAll)rn可以正确执行。(strTextALL返回一个60000个字符的字符串。)rn我在DEPHI中声明如下:rnfunction VCGetDoc(i:integer; var PstrTemp:Pchar):longint; cdecl; varargs; external 'vcwfs.dll';rn调用如下:rnvar k:longint;rn Pstrtemp:Pchar;rn strTemp:wideString;rn PstrTemp:=Pchar('');rn strTemp:='';rn k:=VCGetDoc(10,Pstrtemp);rn strTemp:=PstrTemp;rn虽然没有出错,为何strTemp始终='',而没有得到想要的字符串。rn另外vcwfs.dll不能注册。是否与此有关,dll文件是否都需要注册?
VC DLL的编写调用
#ifndef _LIB_H_ #define _LIB_H_ extern "C" int __declspec(dllexport) add(int a, int b); #endif   #include "stdafx.h" #include "Lib.h" int add(int a, int b) {  return a+b; }   静态调用 // main
如何调用C#编写的DLL
对方给我的接口函数是:rn1、 public int send(string s,string m)rnrn2、public int get(string t)rn t:是关键号rn 如:get('701')rn 返回值为int型:rn 1 找到对应的回复rn dx.sjh 手机号rn dx.msg 内容 rn dx.js 时间rn 0 没有找到对应的回复rn其中dx是动态连接库的名字rn
vc 编写 dll c#调用 源码
自己写的一个 vc编写 dll过程,和使用c#调用 dll的过程,有源码和简单的使用说明。希望对大家有用。
有谁知道 vc调用C#编写的dll
vc6.0中如何调用C#编写的库类型的*.dll文件?
关于C#调用第三方VC编写的DLL
操控一个硬件,需要调用第三方SDK,SDK是VC写的,因为对VC熟悉,想在C#中写,但是现在碰到一个问题,调用其中一个函数的时候出现问题:rnVC中函数原型:rnint WINAPI ZAOpenDeviceEx(HANDLE* pHandle, int nDeviceType,int iCom=1,int iBaud=1,int PackageSize=2,int iDevNum=0);rn我在C#中的引用方式是:rn[DllImport("SynoAPIt.dll", EntryPoint = "ZAOpenDeviceEx", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = false)]rnpublic static extern int ZAOpenDeviceEx(IntPtr pHandle, int nDeviceType,int iCom,int iBaud,int nPackageSize,int iDevNum);rn因为VC函数声明中有四个默认参数,在C#的声明中这四个参数怎么处理rn1.是写成rnpublic static extern int ZAOpenDeviceEx(IntPtr pHandle, int nDeviceType,int iCom,int iBaud,int nPackageSize,int iDevNum);rn调用的时候语句为:rnIntPtr pHandle=new IntPtr();rnZAOpenDeviceEx(pHandle,0,1,1,2,0);rn则会出错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”rn2.还是写成:rnpublic static extern int ZAOpenDeviceEx(IntPtr pHandle, int nDeviceType);rn调用的时候语句为:rnIntPtr pHandle=new IntPtr();rnZAOpenDeviceEx(pHandle,0);rn则会出错:rn“托管调试助手“PInvokeStackImbalance”在“D:\Project\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe”中检测到故障。rn其他信息: 对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::ZAOpenDeviceEx”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”rnrn注:该SDK中还有一个比较简单的函数rnint WINAPI ZAGetUSBDevNum(int* iNums);rn采用如下方式声明调用运行正常rn[DllImport("SynoAPIt.dll", EntryPoint = "ZAGetUSBDevNum", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = false)]rnpublic static extern int ZAGetUSBDevNum(ref int iNums);
C# 调用vc编写的dll 的问题
struct _IMAGE_POINTERrn DWORD is_OK; rn unsigned char* p_image1; rn;rnrn函数原型 rn_IMAGE_POINTER* GetImageBuffer(DWORD cnt)rnrn我该怎么定义接口文件,怎么拿到图象?rn
C#调用VC编写的DLL出现的问题
各位 rn我在C#.NET中调用VC编的DLL动态链接库,其中DLL中有一个含结构体的函数,我在C#中如何调用?以下我是这样做的, rnC#声明: rn[DllImport("gprsdll.dll",EntryPoint="DSGetModemByPosition"] rn public static extern int DSGetModemByPosition(int pos,ref modem_information infor);//返回为1成功,其中modem_information为结构体,其类型为 rn public struct modem_information rn public uint modem_id; //modem ID号 rn public byte[] phone_num; / 号码 rn public UInt32 connect_time;//登陆时间 rn public UInt32 refresh_time;//刷新时间 rn public byte[] dynamic_ip;//动态地址 rn rn我在调用时先定义了一个结构体对象,并对其初始化 rnmodem_information modem=new modem_information(); rnmodem.dynamic_ip=new byte[4]; rnmodem.phone_num=new byte[12]; rn int success=my.DSGetModemByPosition(i,ref modem); rnmy为DSGetModemByPosition所在的一个类的对象 rndll中DSGetModemByPosition是这样定义的: rnstruct __POSITION ;rntypedef __POSITION* POSITION;rnint DSGetModemByPosition(int pos,ModemInfoStruct * modeminfor)//ModemInfoStruct为结构体,其定义类型与上述C#定义一样的 rnint DSGetModemByPosition(int modempos, ModemInfoStruct *pModemInfo)rnrn //这个操作应当是互斥的rn //todo_edwrn int inx=0;rnrn POSITION pos;rn if (modempos
C#调用VC编写的dll的问题
问题挺棘手的,具体描述如下:rnC#调用DLL中的一个导出函数,这个函数中有一参数是数组。rnrn[code=c]////////////////////////////////////////////rnVC dll中该函数原型如下rn//上传彩信资源或者模板接口rnint WINAPI MmsUpTmplOrRes(rnconst int ResType, /*【入参】资源类型*/rnconst char* subject, /*【入参】彩信标题*/rn[color=#FF0000]const SingleFrame framelist[],[/color] /*【入参】彩信帧数组filegroup[]每个文件包对应彩信中的一帧,最多支持10帧*/rnconst int nFrameCnt, /*【入参】帧个数*/ rnconst char* Reverse0, /*【入参】 预留*/rnconst int Reverse1, /*【入参】 预留*/rnchar* TemptId, /*【出参】返回的模板ID或者错误代码*/ rnchar* MmsDec, /*【出参】错误描述*/rnint* MMCErrCode /*【出参】网关错误代码*/ rn)rnrn....rnrnrn其中SingleFrame 结构体定义为:rntypedef struct SingleFramernrn int nPlayTime; //播放时间,单位:秒rn char szImageFilePath[512]; //图片文件绝对路径rn char szTxtFilePath[512]; //文字文件绝对路径rn char szAudioFilePath[512]; //声音文件绝对路径rnSINGLEFRAME,*LPSINGLEFRAME;[/code]rnrnrn上面是DLL中的代码,接下来是c#调用rn代码如下rnrn[code=csharp]//下面是声名结构体和函数原型rn[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]rn public struct SingleFramern rn public int nPlayTime; //播放时间,单位:秒 rn public string szImageFilePath //图片文件绝对路径rn public string szTxtFilePath; //文字文件绝对路径 rn public string szAudioFilePath;//声音文件绝对路径rn rn[DllImport("MMS.dll", CharSet = CharSet.Ansi)]rn public static extern int MmsUpTmplOrRes(rn int ResType, /*【入参】资源类型*/rn string subject, /*【入参】彩信标题*/rn SingleFrame[] framelist, /*【入参】彩信帧数组filegroup[]每个文件包对应彩信中的一帧,最多支持10帧*/rn int nFrameCnt, /*【入参】帧个数*/rn string stringReverse0, /*【入参】 预留*/rn int Reverse1, /*【入参】 预留*/rn out string TemptId, /*【出参】返回的模板ID或者错误代码*/rn out string MmsDec, /*【出参】错误描述*/rn ref int MMCErrCode /*【出参】网关错误代码*/rn );rnrn//调用rn SingleFrame singleTest;rn singleTest.nPlayTime = 300;rnchar[] c= new char[]'a','g';rnrnsingleTest.szTxtFilePath = "c:\\001.txt" ; rnsingleTest.szAudioFilePath = null;rnsingleTest.szImageFilePath = null;rnSingleFrame[] singleTestList = new SingleFrame[1] singleTest ;rnrnstring TemptId = ""; //返回的模板ID或者错误代码rnstring MmsDec = ""; //错误描述rnint MMCErrCode = 0; //网关错误代码rn tryrn rn int nRlt = MmsUpTmplOrRes(0, "test012", singleTestList, 1, "", 0, out TemptId, out MmsDec, ref MMCErrCode);rn rn catch (System.Exception ex)rn rn string err = ex.Message;rn [/code]rnrn结果:该数组的值没有传入DLL中,在DLL中afxmessagebox,数组中元素为空rnrn不知道为什么有这样问题出现 不解rn多谢各位大神相助
用C#编写的DLL,VC怎么调用?
如题,谢谢
C#调用VC编写的DLL(给分)
新手提问,用vc封装了一个dll,但是在c#中调用时,dll只得到一个字符。请高手给与解答,谢谢!!rn这段是我用vc写的dll的程序rn//Export.cpprninclude "stdafx.h" rn#include "AppApi.h" rnstatic CString GetTempName(CString strPath); rnrnBOOL WINAPI OnSend(CString strNumber) rn rn AfxMessageBox(strNumber);rn return true;rnrnrn//ApppApi.hrn#ifdef __cplusplus rnextern "C" rn#endif rn/* __cplusplus */rnrnrnstruct SmsData rn rnBOOL bSmsFullScreen; rnchar szSmsPath[MAX_PATH]; // no unicode path support rnchar szSmsFilename[MAX_PATH]; rn; rnrnBOOL WINAPI OnSend(CString strNumber); rnrn#ifdef __cplusplus rn rn#endif rnrn下面是c#的程序rn//rnrn[DllImport("Sms.dll", EntryPoint="OnSend",CharSet=CharSet.Auto)]rn public static extern int OnSend(string phone);rnprivate void button1_Click(object sender, System.EventArgs e)rn rn string AA;rn AA=textBox1.Text;rn tryrn rn Form1.OnSend(AA);rn rn catch( EntryPointNotFoundException)rn rn rn rn rnrnrnrnrnrn谢谢各位大虾了
vc能否调用c#编写的DLL???
调用时可以把DLL文件引进来,但是却找不到里面的函数rn请问是什么原因,如果可以调用,请给个例子说明,谢谢
C#调用VC的DLL
本文详细阐述了C#如何调用C++的DLL详细方法
c#调用 vc dll
函数原型:extern "C" _declspec(dllexport) LPCSTR SearchName(LPCSTR strName,int iStart,int iCount=200)rnrn我:rn [DllImport("DllName", CharSet = CharSet.Ansi)]rn static extern string SearchName(String strName, int start, int count);rnrn这样做调用的时候报错,外部组件异常,是哪里出了问题呢?
VC 6.0 如何调用 VC.NET 编写的DLL ???
VC 6.0 如何调用 VC.NET 编写的DLL ???
VBA如何调用VC编写的DLL?
VBA如何调用VC编写的DLL?rnrn我自己编了一个函数rnint __stdcall mytest()rnrn ::AfxMessageBox("这儿是DLL中的MYTEST函数!");rn return(0);rnrnrn这个函数,如何在VBA中调呢?
在ASP中如何调用VC编写的DLL
在ASP中如何调用VC编写的DLL
Delphi 如何调用 VC 编写的 DLL?
我有一个用 VC 写的 DLL 动态链接库(输出lib文件)rn我现在想在Delphi 下调用该动态链接库,该如何调用?
VC下如何调用VB编写的DLL
我用REGSVR32注册了这个DLL ,但我在VC下的COMPONENT AND CONTROL 中找不到这个控件
vb.net 中如何调用vc编写的dll
手头有一vc写的dll,该dll在system32下不能注册,在vb.net工程里添加引用也不行。该dll封装了很多类,请教在vb.net中我该如何调用这些该dll,谢谢!
VB、DELPHI如何调用VC编写的DLL?
VB、DELPHI如何调用VC编写的DLL?
VB中如何调用VC编写的dll?
VB中如何调用VC编写的dll?如何进行参数传递
VB如何调用VC编写的DLL?
在VB中代码如下:rnPrivate Declare Function GetGrantTest Lib "grant.dll" (ByVal m_UserName As String, ByVal m_Password As String, ByVal m_PcName As String) As Longrnrn在VC中代码如下:rnint _stdcall GetGrantTest(char* m_szSymbol, char* m_szPassWord, char* m_szPcName);rnrn可是调用时出错,说找不到入口点。rn请问该怎么办?
pb如何调用vc编写的.dll!!!
我用pb调用vc编写的.dll,只能调用参数是int型的.dll,一旦调用参数是数组的便会提示我指定类型与声明函数类型不一致,但明明是一致的,那位高手遇到过此类问题,请赐教!!!rn分数还可以增加,急!!!
ASP调用VC编写的DLL
我的VC的函数如下:rnSTDMETHODIMP CHistory::GetString(BSTR *s)rnrn USES_CONVERSION;rn *s = ::SysAllocString((const OLECHAR*)A2W("This is a new one!"));rn return S_OK;rnrnrn请问该怎么在ASP里面调用,才能得到参数s,在ASP页面上显示出来?
DLL(VC)编写和VB调用
DLL(VC)编写和VB调用,基础的调用实例
VB 调用VC 编写的DLL
现由VC 编写的DLL,DLL 入口函数定义如下:rnint TMS_DownLoad ( HANDLE hd_no ,Char CommType,struct down_info downfile,rn char *ret_info)rn入口参数:HANDLE hd_no:通讯链接的文件句柄rnchar CommType:通讯方式(0x01:串口,0x02:tcp/ip)rn 出口参数:char *ret_info:下载结果返回信息rnrn其中:struct down_info rnchar ProgFile[255]; rnchar ParaFile[255]; rnchar DataFile[255]; rnchar OtherFile[255]; rnchar Type ; rnchar Co_info[128] ; rnchar TMS_info[128]; rnrn__declspec(dllimport) int TMS_DownLoad(HANDLE hd_no,char CommType,struct down_info downfile,char *ret_info);rnrn能否给出DELPHI调用该DLL 函数的定义码?rn急等rn
VC调用VB编写的DLL
前面发过关于DLL的问题,感谢那位朋友,解决了VC调用VB的ACTIVE DLL;rnrn现在可实现调用;可问题仍然存在;DLL中有一公用函数,内容就是加载三个窗体;rnrnVC调用DLL后,当加载完第一个窗体后,即停住,不再往下加载其它窗体,为什么?rnrn同样的DLL,在VB环境下,可以把三个窗体全加载出来.
vb 调用 vc编写的DLL
vc里有一个函数形式如下:rnrnvoid add(int add1,int add2, int *sum);rnrn这个函数怎么在vb中用呢?vb不是没有指针么?
delphi 调用vc编写的dll
vc编写的dllrnlong SetMeterCode(long comnum,unsigned char *SendString, Unsigned char *ReceFrame:Pchar)rnrn其中SendString为传入参数,ReceFrame为返回参数rnrndelphirn函数定义rnFunction SetMeterCode(var comnum:DWord;var SendString:Pchar;var ReceFrame:Pchar):Dword;stdcall;External 'SetMeterCode.dll' ;rnrnprocedure TForm1.Button1Click(Sender: TObject);rnvarrn SendStr:pchar;rn MyCom:Dword;rn ReStr:pchar;rn i:integer;rnbeginrn MyCom:=0;rn SendStr:='68010a14111111111100000605';rnrn if SetMeterCode(mycom,SendStr,ReStr)=0 thenrn showmessage('success')rn elsern showmessage('Failure');rnrn showmessage(Restr);rnrnend;rnrn最后运行结果,返回来的ReStr为乱麻,应该是数字,并且函数不成功返回应该为负值,不论什么情况,返回都是0,而且运行最后报错read of address 000000135rn请教各位大侠,应该如何处理
调用VC编写的dll的问题
rn 我新建了一个application,在form内添加一个button控件,在button的onclick事件中调用SafeEngine.dll中的SEH_InitialSession过程,可是运行时会报如下错误:Access violation at address 1000C8B1 in module 'SafeEngine.dll'.Write of address 00000002.请问主要是哪方面出错啦?rnrn 我的源码如下:rnunit Unit1;rnrninterfacernrnusesrn Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;rnrn procedure SEH_InitialSession(PriKeyDevType: Integer; const strPrivKeyDevParam: WideString;const strPriKeyPass: WideString; lPriKeyTimeout: Integer;CertChainDevType: Integer; constrnstrCertChainDevParam: WideString;const strCertChainPass:rnWideString);StdCall;rnrntypern TForm1 = class(TForm)rn Button1: TButton;rn procedure Button1Click(Sender: TObject);rn privatern Private declarations rn publicrn Public declarations rn end;rnrnvarrn Form1: TForm1;rnrnimplementationrnprocedure SEH_InitialSession;external 'SafeEngine.dll' name rnrn'SEH_InitialSession';rn$R *.dfmrnrnprocedure TForm1.Button1Click(Sender: TObject);rnbeginrnSEH_InitialSession(2,'userkey.key','sheca',1000,2,'CertChain.spc','');rnend;rnrnend.rn
VB调用VC编写的DLL
我用VC编写了一个简单的DLL,导出函数如下:rnextern "C" __declspec(dllexport) int SUM(int * a,int n) rnrn int sum = 0;rn for(int i = 0; i < n; i ++)rn sum += a[i];rn return sum;rnrnrn然后在VB中进行调用,如下:rnPrivate Declare Function SUM Lib "test" (ByRef a() As Long, ByVal n As Long) As LongrnrnPrivate Sub Command1_Click()rnDim a(3) As LongrnDim n As Longrnrna(0) = 0rna(1) = 1rna(2) = 2rna(3) = 3rnn = 4rnMsgBox (SUM(a, n))rnEnd Subrnrn但结果总是莫名其妙,请问各位高手错在何处?rn
bcb调用vc编写的dll
需要实现一个锁屏功能,恰巧记得以前有个vc编写的全局hook dll,于是拿来使用 dll动态载入 实现屏蔽成功 rnrn接着 解除屏蔽 问题来了! hook卸载返回值正确 可是屏蔽却没解除 并且程序界面无法接受任何信息
VB.net调用DLL(VC编写的)?
VB.net调用DLL(VC编写的)?rn哪里有相关的介绍rn能给个连接吗
vc调用delphi编写的dll???
我在delphi 7写了个dll工程,运行后生成mydll.dll,但是没有lib、exp文件,rn而vc中隐式调用dll需要lib文件(link test.obj mydll.lib)才能生成test.exe文件(测试dll),怎么解决rnrn这个问题的??(只限隐式调用)
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview