sdk开发dll里//#define DLLDIR _declspec(dllimport)急需在调用dll函数要函数名添加此句?

sdk开发dll里//#define DLLDIR __declspec(dllimport)需要在调用dll函数要函数名添加此句???

SDK dll

#define DLLDIR  __declspec(dllimport)   // export DLL information
//函数指针的SetBMPCallback使用的回调函数
typedef void ( CALLBACK *BMPCallback)(unsigned long callbackID, BITMAPINFO * info, unsigned char *data, unsigned long size);

int DLLDIR SetBMPCallback(int hd, unsigned long callbackID, BMPCallback callback);


调用dll时,
//回调函数
void CALLBACK mybmpCallback(unsigned long callbackID, BITMAPINFO * info, unsigned char *data, unsigned long size)
{
BITMAPFILEHEADER bfh = {0};
bfh.bfType=0x4D42;
bfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);
bfh.bfSize = bfh.bfOffBits + info->bmiHeader.biSizeImage; FILE *ofile = fopen("image.bmp", "wb");
fwrite(&bfh, sizeof(bfh), 1, ofile);
fwrite(&info->bmiHeader, sizeof(info->bmiHeader), 1, ofile); fwrite(data, 1, info->bmiHeader.biSizeImage, ofile); 
fclose(ofile);
}
//自己写回调函数的地址赋值给p(dll里的函数指针类型)
BMPCallback p =mybmpCallback;
//下面是调用SetBMPCallback函数,还有要加 __declspec(dllimport)吗???打断点回调函数mybmpCallback无法调用
typedef int (CALLBACK* PF_SetBMPCallback)(int hd, unsigned long callbackID, BMPCallback callback);
PF_SetBMPCallback SetBMPCallback2 = (PF_SetBMPCallback)GetProcAddress(hh, "SetBMPCallback");
  SetBMPCallback2(hd,1,p);

------解决方案--------------------
封装的dll里函数前面加聊,那我调用的时候需要加吗??????????
引用:
导出的函数或者类前面要加

------解决方案--------------------
引用:
封装的dll里函数前面加聊,那我调用的时候需要加吗??????????
引用:导出的函数或者类前面要加



调用的地方你也要引用到他的申明的头文件啊  说白了  dll里用export申明函数是导出的 

你使用的地方的申明肯定就是import申明函数是从dll中导入的  一般的dll头文件都会用宏

来控制 在dll中是导出 在使用中是导入  比如:

#ifdef XXX
#define DLLDIR  __declspec(dllexport)   // export DLL information
#else
#define DLLDIR  __declspec(dllimport)   // export DLL information
#endif

然后所有导出的函数前加上 DLLDIR
最后在dll工程里会定义那个 XXX  这样 编dll的时候就是导出的申明  

在你使用的工程因为没有定义XXX 所以就是导入的申明

------解决方案--------------------
调用的时候可以不加,加了实际是一种优化,编译器知道是dll的导入函数直接生成到IAT的调用。

如果不加,会链接lib文件中的代码,通过lib导入库的代码跳转到IAT。