标题:[求助]DLL调用约定错误
只看楼主
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
结帖率:72.73%
 问题点数:0 回复次数:2 
[求助]DLL调用约定错误

[求助]DLL调用约定错误

最近学习VC++ 写动态链接库,编译成功一个动态连接库工程后,我用VB调用该动态连接库但是却出现了错误"DLL调用约定错误".
仔细检查参数类型仍没发现错误,请各位帮我看看-人多力量大!嘿嘿

错误提示(如下图所示图片)

此主题相关图片如下:


动态连接库里写了一个HOOK函数(别害怕,我不会搞破坏的,哈哈),具体代码如下:

源文件Hook.cpp

#include <windows.h>
HHOOK g_hKeyboard=NULL;

#pragma data_seg("MySec")
HWND g_hWnd=NULL;
#pragma data_seg()


LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)
{
MessageBox(0,"F2被按下!",NULL,0);
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyboard);
}
return 1;
}

int SetHook(HWND hwnd)
{
g_hWnd=hwnd;
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
return 1;
}
模块定义文件Hook.def
LIBRARY Hook
EXPORTS
SetHook
SEGMENTS
MySec READ WRITE SHARED

注: 这个动态连接库工程是我的偶像"孙鑫"老师写的,在VC++中可以被成功调用.因此大家不必考虑动态链接库是否有问题.

在VB中我是这样声明的:
Private Declare Function SetHook Lib "C:\Hook.dll" (ByVal hwnd As Long) As Long

调用过程为:
Private Sub Command1_Click()
SetHook Me.hwnd
End Sub

附上面提到的所有文件:

再次声名该程序没有任何坏意.你可以放心下载测试.按F2键 ,卸载钩子

谢谢大家!

http://bbs.bc-cn.net/viewFile.asp?BoardID=6&ID=29062

搜索更多相关主题的帖子: DLL 动态链接库 约定 
2007-10-15 21:59
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
得分:0 

mfc默认是cdecl函数调用方式.

你试下
int __stdcall SetHook(HWND hwnd)


★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-15 22:24
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
得分:0 
回复:(Janlex)mfc默认是cdecl函数调用方式.你试下i...

谢谢你
问题解决了


鲲鹏数据 - 专业Web数据采集服务提供者
http://www.
2007-10-15 22:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-177927-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.710259 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved