DLL函数定义和函数实现写函数类型的不同, 引起不能使用Dll中的函数

来源:互联网 发布:linux 内存管理 编辑:程序博客网 时间:2024/05/17 02:34

<2011_0112>

/**

* 这个.h是给Dll的导出函数的头文件

*/

MY_DLL_API int __stdcall DoSomething(INT &nLen);

 

/**

* 实现文件

*/

MY_DLL_API int __stdcall DoSomething(DWORD &nLen)

{

//...

return S_OK;

}

 

/**

* def文件

*/

LIBRARY "xxlib"
DESCRIPTION  'xxLib Windows Dynamic Link Library'

EXPORTS

DoSomething

 

编译不报错, 等用到DoSomething函数时, 总是提示无法解决的外部函数.

工程中的函数名字起的比较长, 30几个字符长度. 入参4个, 这个写错的入参在最后一个.

 

自己折磨自己,花了5个小时来解决这个问题.

 

总结: 标准win32Dll, 导出的是内建类型. 都是全局函数, 编译时, 并不需要导出函数的头文件.

那个头文件是给调用者配合.lib一起使用的, 要是不用.h,和.lib, 就得动态调用.

 

还有一点,入参名称起名不好,引起的问题真不小. 要是原先是INT &nLen, 当长度不够,需要改变时, 应写成DWORD &dwLen,

如果是这样,问题能马上就发现.

 

不知道好习惯,是不是都是碰壁得来的...

 

回来做了个实验, 验证了这个问题.

函数的形参是由函数实现的形参决定的, 和导出函数头声明无关. 但是也能编译的过去,很怪的.