返回信息流动态库的源码是:
// lib.h
extern "C" __declspec (dllexport) void __stdcall add(char * x);
// lib.cpp
#include <windows.h>
#include "lib.h"
void WINAPI add(char *x)
{
strcpy(x, "hello");
return;
}
用VC新建mfc应用工程,对动态库的调用:
void CDllTest_ToolDlg::OnOK()
{
// TODO: Add extra validation here
typedef void (__stdcall *ABCD)(char *);
HINSTANCE hdll = LoadLibrary(_T("..\\debug\\dllTest.dll"));
if (hdll == NULL)
{
MessageBox("调用动态库失败");
return;
}
// ABCD add = (ABCD)GetProcAddress(hdll, "add");
ABCD add = (ABCD)GetProcAddress(hdll, "_add@4");
if (add == NULL)
{
MessageBox("调用函数地址失败");
return;
}
char ret[10];
add(ret);
MessageBox(ret);
}
问题:
虽然typedef时也加上了__stdcall,但是在获取add函数地址时,用"add"不行。。。还是得写成"_add@4",为什么呢?要怎么做才能直接用"add"就可以找到到add函数的地址呢?
这是一条镜像帖。来源:北邮人论坛 / windows / #116137同步于 2011/6/2
Windows机器人发帖
【请教】关于__stdcall的动态库函数声明及动态库调用的疑问
zzh
2011/6/2镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。