在上一篇文章中谈到AuxInitPosition和AuxReshapeFunc(),其中AuxReshapeFunc()用到了AuxInitPostion中的数据,如何才能做到这一步呢?
一、AuxTest.dll编写
先新建一个工程TestAux,在其中加入Win32 Dynamic类型的工程AuxTest,加入Son_glaux.h
Son_glaux.cpp,AuxTest.def
Son_glaux.h中,
#ifndef __Son_glaux_h__
#define __Son_glaxu_h__
#include "windows.h"
#ifdef __cplusplus
extern "C"
{
#endif
void APIENTRY SauxInitPostion(int ,int ,int ,int);
typedef void (CALLBACK* Sauxreshape)(int ,int );
void APIENTRY SauxReshapeFunc(Sauxreshape);
#ifdef __cplusplus
};
#endif
#endif // __Son_glaux_h__
Son_glaux.cpp中,
#include "Son_glaux.h"
RECT rc;
void APIENTRY SauxInitPostion(int x,int y,int xsize,int ysize)
{
rc.left=x;
rc.top=y;
rc.right=xsize;
rc.bottom=ysize;
}
void APIENTRY SauxReshapeFunc(Sauxreshape pfun)
{
pfun(rc.right,rc.bottom);
}
在AuxTest.def导出函数,
LIBRARY AuxTest
EXPORTS
SauxInitPostion @ 1
SauxReshapeFunc @ 2
;SauxReshapeFunc之后的空格不能省,否则出错
执行,即可得到AuxTest.lib,AuxTest.dll。可用depends工具查看,函数名没有变。
二、向WorkSpace中加入Simple Console的dllCall工程,
dllCall.cpp中,
#include "..//AuxTest//Son_glaux.h"
#include "iostream.h"
#pragma comment(lib,"..//AuxTest//Debug//AuxTest.lib");
void CALLBACK myshape(int xsize,int ysize)
{
cout<<"xsize = "<<xsize<<",ysize = "<<ysize<<endl;
}
int main(int argc, char* argv[])
{
char a;
SauxInitPostion(5,5,10,20);
SauxReshapeFunc(myshape);
cin>>a;
return 0;
}
测试,确实得打了自己预想。
三、总结
1、def文件中,函数名、@、序号之间要有空格
2、建立头文件,加入
#ifdef __cplusplus__
extern "C"
{
#endif
……//这里是常规的函数
#ifdef __cplusplus__
}
#endif
这样就可以建库。