求救:如何用vc做一个串口通信程序,并以dll文件的形式上传 小弟前段时间用tc写了个串口通信程序,最近被告知tc无法以32位的动态连接库形式提交,头告诉我用vc去写,做成个dll.天啊,vc我还不会用啊,求各位老大帮帮忙。能帮我解决这个问题,我是新手,就那点分,您要多少就拿多少好了。再次拜谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 拿E-Mail过来,给你个例子,或者告诉你怎么做DLL,一、 函数的定义和使用方法: 第一步: 运行AppWizard,定义项目名为mydll,选择MFC AppWizard(dll),而不是MFC AppWizards(exe)。 第二步: 在这个例子中,只有一个AppWizard屏幕出现,选择MFC扩展DLL(MFC Extension DLL (using shared MFC DLL),点击FINISH生成工程。 第三步: 点击File中的New,选择C/C++ Header File,File Name中输入dll,点击OK,创建dll.h。输入extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3); ,保存。 第四步: 点击File中的New,选择C++ Source File,File Name中输入dll,点击OK,创建dll.cpp。输入 #include "stdafx.h" #include "dll.h" extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3) { return x1+x2+x3; } 编译生成mydll.dll和mydll.lib。 第五步: 选择Project 中Add To Project 中的New , 重新生成一个工程,选择MFC AppWizards(exe),项目名为mydlltest , 选择Single Document ,点击FINISH,生成一个新的工程。选择菜单中的Project àSet Active Project àmydlltest ,将mydlltest设为当前活动工程。 第六步: 拷贝…\mydll\debug\mydll.dll 到 ..\mydlltest\debug\下,拷贝…\mydll\debug\mydll.lib到…\mydlltest\目录下。 第七步: 在mydlltestView.cpp中的#endif下添加 extern "C" __declspec(dllimport) int fun(int x1,int x2,int x3); 在void CMydlltestView::OnDraw(CDC* pDC)中添加代码如下: void CMydlltestView::OnDraw(CDC* pDC) { CMydlltestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int x=fun(1,2,3); CString str; str.Format("%d",str); pDC->TextOut(10,10,x); } 第八步: 在WorkSpace中的mydlltest files上点击右键,选择Add files to Project ,将mydll.dll添加到工程。好了,我们的工作做完了,运行一下看看吧! 二、 类的添加和使用步骤: 在mydll中生成一个新类,类的声明处改为class AFX_EXT_CLASS CMyClass ,在此类中和其他类一样添加自己需要的变量和函数,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个myclass.h文件,拷贝mydll中myclass.h的所有代码到新生成的myclass.h中。在需要使用dll中CmyClass类的文件中包含myclass.h,然后我们就可以向其他类一样使用该类了。 三、 字符串的定义和使用 在mydll中定义字符串资源,编译生成新的dll和lib,重复上面的第六步,在mydlltest中的myclass.h中添加 #define IDS_MYSTR 1(假设我们定义的字符串资源的ID号为IDS_MYSTR),在需要是要该字符串的地方添加#include "myclass.h",即可使用该字符串了。 CString str2; str2.LoadString(IDS_MYSTR); 四、 对话框的定义和使用 在mydll中定义对话框资源,生成一个新类CDlg,类的声明处改为class AFX_EXT_CLASS CDlg : public CDialog ,像其他对话框一样定义对话框的属性和功能,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个dlg.h文件,拷贝mydll中dlg.h的所有代码到新生成的dlg.h中。在需要使用dll中此对话框资源的文件中包含dlg.h,然后我们就可以向其他对话框一样使用此对话框了。 CDlg dlg; dlg.DoModal(); 上面的是另一位仁兄的话,我借的。调用DLL的方法,显示//--定义“实例” HINSTANCE Dll_handler;//--声明dll内的函数typedef BOOL (*DLLTEST)(int nPort, int nBaud, int nByte, int nParity);DLLTEST CommOpen;;//--装载dll Dll_handler = LoadLibrary("Commpro.dll"); CommOpen = (DLLTEST)GetProcAddress(Dll_handler,"CommOpen");//--取得dll中的函数地址CommOpen(m_nPort,m_nBaud,m_nByte,m_nParity)FreeLibrary(Dll_handler);隐示就是加LIB到CPP文件夹中,再写个头文件来声明DLL中的函数。 先学学怎么做最基本的窗体,然后学怎么做最基本的dll,到msdn输入dll查询最后把通讯的函数导出给其他程序调用。测试测试改进 我的email是:[email protected].谢谢上面两位大哥了,可我还不是很明白。 呵呵,如果你以前没用过vc,的确有点难明白。如果真是这样,还是先好好学vc吧 你不是写好了么!写好的封装在DLL中就好了。 先照msdn,或者楼上的步骤建一个mfc dll, 然后把你的函数加入,在def文件中加入导出函数名。编译通过后,用depends或cooldb看看是否正确导出.其他程序用加入lib,dll,h文件调用或者直接loadlibary调用。到www.vckbase.com找找现成的关于dll的例子,太多了。 extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3) { return x1+x2+x3; }如果我要多个返回值,是多定义几个函数,还是该怎么办?请您指教.顺便问一下,怎么把分给你们啊? 看:http://expert.csdn.net/Expert/topic/1333/1333891.xml?temp=.2313043http://expert.csdn.net/Expert/topic/1034/1034807.xml?temp=.5889704http://expert.csdn.net/Expert/topic/1336/1337000.xml?temp=.5641901 CBCGPGridCheckItem 高手麻烦帮忙看看。。 MFC非模态对话框嵌入桌面 一个可以很方便实现服务端和客户端之间的数据共享的用于C/S软件的动态链接库。 VC小问题求助,想了好几个小时了 如何在Windows的主窗口绘图????? 向各位高手请教 关于exe文件 链表在vc里面使用,需要定义一个类吗 How to handle script errors as a WebBrowser control host 菜鸟问题 请问如何在对话框中加入工具条
#include "dll.h"
extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3)
{
return x1+x2+x3;
} 编译生成mydll.dll和mydll.lib。 第五步: 选择Project 中Add To Project 中的New , 重新生成一个工程,选择MFC AppWizards(exe),项目名为mydlltest , 选择Single Document ,点击FINISH,生成一个新的工程。选择菜单中的Project àSet Active Project àmydlltest ,将mydlltest设为当前活动工程。 第六步: 拷贝…\mydll\debug\mydll.dll 到 ..\mydlltest\debug\下,拷贝…\mydll\debug\mydll.lib到…\mydlltest\目录下。 第七步: 在mydlltestView.cpp中的#endif下添加 extern "C" __declspec(dllimport) int fun(int x1,int x2,int x3); 在void CMydlltestView::OnDraw(CDC* pDC)中添加代码如下: void CMydlltestView::OnDraw(CDC* pDC)
{
CMydlltestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int x=fun(1,2,3);
CString str;
str.Format("%d",str);
pDC->TextOut(10,10,x);
} 第八步: 在WorkSpace中的mydlltest files上点击右键,选择Add files to Project ,将mydll.dll添加到工程。
好了,我们的工作做完了,运行一下看看吧! 二、 类的添加和使用步骤: 在mydll中生成一个新类,类的声明处改为class AFX_EXT_CLASS CMyClass ,在此类中和其他类一样添加自己需要的变量和函数,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个myclass.h文件,拷贝mydll中myclass.h的所有代码到新生成的myclass.h中。在需要使用dll中CmyClass类的文件中包含myclass.h,然后我们就可以向其他类一样使用该类了。 三、 字符串的定义和使用 在mydll中定义字符串资源,编译生成新的dll和lib,重复上面的第六步,在mydlltest中的myclass.h中添加 #define IDS_MYSTR 1(假设我们定义的字符串资源的ID号为IDS_MYSTR),在需要是要该字符串的地方添加#include "myclass.h",即可使用该字符串了。 CString str2;
str2.LoadString(IDS_MYSTR); 四、 对话框的定义和使用 在mydll中定义对话框资源,生成一个新类CDlg,类的声明处改为class AFX_EXT_CLASS CDlg : public CDialog ,像其他对话框一样定义对话框的属性和功能,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个dlg.h文件,拷贝mydll中dlg.h的所有代码到新生成的dlg.h中。在需要使用dll中此对话框资源的文件中包含dlg.h,然后我们就可以向其他对话框一样使用此对话框了。 CDlg dlg;
dlg.DoModal();
上面的是另一位仁兄的话,我借的。调用DLL的方法,显示
//--定义“实例”
HINSTANCE Dll_handler;//--声明dll内的函数
typedef BOOL (*DLLTEST)(int nPort, int nBaud, int nByte, int nParity);
DLLTEST CommOpen;;
//--装载dll
Dll_handler = LoadLibrary("Commpro.dll"); CommOpen = (DLLTEST)GetProcAddress(Dll_handler,"CommOpen");//--取得dll中的函数地址
CommOpen(m_nPort,m_nBaud,m_nByte,m_nParity)
FreeLibrary(Dll_handler);
隐示就是加LIB到CPP文件夹中,再写个头文件来声明DLL中的函数。
然后学怎么做最基本的dll,到msdn输入dll查询
最后把通讯的函数导出给其他程序调用。
测试测试改进
谢谢上面两位大哥了,可我还不是很明白。
编译通过后,用depends或cooldb看看是否正确导出.其他程序用加入lib,dll,h文件调用或者直接loadlibary调用。到www.vckbase.com找找现成的关于dll的例子,太多了。
{
return x1+x2+x3;
}
如果我要多个返回值,是多定义几个函数,还是该怎么办?
请您指教.
顺便问一下,怎么把分给你们啊?
http://expert.csdn.net/Expert/topic/1034/1034807.xml?temp=.5889704
http://expert.csdn.net/Expert/topic/1336/1337000.xml?temp=.5641901