
在.cpp头部加上如下语句:#define DLLEXPORT __declspec(dllexport)
2、实现函数:DLLEXPORT int Add(int first,int second)
{ return (first+second)}
3、 使用Dll:在要使用该dll中函数的头文件中加入:
#define DLLIMPORT __declspec(dllimport)
#pragma comment(lib,"cal.lib")
DLLIMPORT int Add(int first,int second)
4、 如果使用了新建头文件,则包含该头文件再引用dll中的函数。
二、导出class的DLL
1、 在要导出的dll中,右键点击ClassView的根目录->New Class->Generic,添加一新类CRectArea
2、 在新添加类头文件中加入:#define DLLEXPORT __declspec(dllexport)
3、 在类前加入DLLEXPORT:class DLLEXPORT CRectArea{…}
4、 加入实现函数
5、 在.exe中,在要调用dll中函数的类前加入#define DLLIMPORT __declspec(dllimport)、#pragma comment(lib,”Calc.lib”)及#include “RectArea.h”
6、 将RectArea.h 及.dll、.lib copy到当前.exe目录下,将.h添加到工程中
7、 在头文件中声明变量:CRectArea m_RectArea
8、 调用Dll中类的函数
三、通过.DEF文件创建Dll
1、在Dll的CXXXApp头文件中添加函数声明:int Mul(int,int)double Div(double,double)
2、在.cpp中实现之:int Mul(int a,int b) { return a*b}
double Div(double a,double b) { return a/b}
3、找到.DEF文件并打开,EXPORTS
Explicit exports can go here
Mul @1 (新加行)
Div @2 (新加行)
4、在调用的头文件中加入:typedef int (CALLBACK *LPMUL)(int,int)及 typedef double (CALLBACK *LPDIV)(double,double)
5、 在调用文件中加入代码: UpdateData(TRUE)
HINSTANCE hInst = LoadLibrary("Cal.dll")
LPNUM lpNum
lpNum = (LPNUM)GetProcAddress(hInst,"Mul")
m_c = lpNum(m_a,m_b)
UpdateData(FALSE)
FreeLibrary(hInst)及(因为有两个函数Mul&Div)
UpdateData(TRUE)
HINSTANCE hInst = LoadLibrary("Cal.dll")
LPFNUM lpfNum
lpfNum = (LPFNUM)GetProcAddress(hInst,"Div")
m_last = lpfNum(m_first,m_second)
UpdateData(FALSE)
FreeLibrary(hInst)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shg104/archive/2006/07/04/875592.aspx
我这里没找到你这个版本的spcomm组件,是dll的还是pas的。我分析了一下你的代码,感觉代码没问题,buffer的长度为7,7个数字也全部输出了。所以感觉问题还是出在sio_write函数上,你可以查看一下源函数,估计原函数输出的时候以4位输出。00是高位,所以值大小并有改变。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)