DLL,简单拿分问题!VC

otuotu 2002-07-21 01:52:59
自己写的DLL编译通过。如下:
**** .h:*****
#define DLL_EXPORT __declspec(dllexport)
......
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
**** .cpp*****
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo)
{
........
}
在我的另一个程序中调用这个DLL
**********cpp**********
typedef int (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
.......

HINSTANCE hFunction=LoadLibrary("kernel.dll");
VERIFY (hFunction);
MyPositionDectect PositionDectect=(MyPositionDectct)GetProcAddress(hFunction,"PositionDectect");

调用哪里错了,在线等待!




...全文
44 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnzzz 2002-07-21
  • 打赏
  • 举报
回复
你的#define DLL_EXPORT __declspec(dllexport)
有误,不信你用Dependency Walker看看
肯定没有导出PositionDectect,而是导出了_PositionDectect_@...之类东东,不如这样定义
#define DLL_EXPORT extern "C" __declspec(dllexport)
或者#define DLL_EXPORT extern 'C' __declspec(dllexport)
不好意思,我忘了是不是双引号了,你试试看.
或者用DEF文件也可以.
otuotu 2002-07-21
  • 打赏
  • 举报
回复
sorry!my mistake
otuotu 2002-07-21
  • 打赏
  • 举报
回复
the same mistake
96151024 2002-07-21
  • 打赏
  • 举报
回复
typedef int (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
改为
typedef int _stdcall (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
式式



typedef int __declspec(dllimport) (*MyPositionDectect)(BYTE *pDib, int *PosInfo);
otuotu 2002-07-21
  • 打赏
  • 举报
回复
如果去掉最後一句
MyPositionDectect PositionDectect=(MyPositionDectct)GetProcAddress(hFunction,"PositionDectect");
編譯就不會報錯,他報'MyPositionDectect' : undeclared identifier
otuotu 2002-07-21
  • 打赏
  • 举报
回复
96151024(富贵山庄) :看过了是PositionDectect,没错的
96151024 2002-07-21
  • 打赏
  • 举报
回复
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
定义的过程,在DLL文件里面的函数名称不是PositionDectect,你用vc的工具
depends察看就知道叫什么了,你可以这样定义那么名称就不会被改变

自己定义一个扩展名为DEF的文件在DEF里面加入:
EXPORTS:
PositionDectect;

函数这样定义

int _stdcall PositionDectect(BYTE *pDib, int *PosInfo);
otuotu 2002-07-21
  • 打赏
  • 举报
回复
编译没通过啊,不是执行的时候出错。kernel.dll不会重明。2000系统的是kernel32.dll
96151024 2002-07-21
  • 打赏
  • 举报
回复
DLL_EXPORT int PositionDectect(BYTE *pDib, int *PosInfo);
定义的过程,在DLL文件里面的函数名称不是PositionDectect,你用vc的工具
depends察看就知道叫什么了,你可以这样定义那么名称就不会被改变

自己定义一个扩展名为DEF的文件在DEF里面加入:
EXPORTS:
PositionDectect;

函数这样定义

int _stdcall PositionDectect(BYTE *pDib, int *PosInfo);
lqbn 2002-07-21
  • 打赏
  • 举报
回复
同意xuying()的。
watchnight 2002-07-21
  • 打赏
  • 举报
回复
请问你的dll是叫kernel.dll吗?
如果不是在LoadLibrary的参数里写入实际的dll的full path
xuying 2002-07-21
  • 打赏
  • 举报
回复
你编译生成的dll是kernel.dll吗?会不会和系统的重复了?
HINSTANCE hFunction=LoadLibrary("kernel.dll");

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧