对VC的动态加载DLL时擅自更改函数名强烈表示不满!!!!!!!!!!!

bluecrest 2002-03-29 09:39:56
//以下是动态加载DLL的代码,语法完全正确,DLL在静态连接完全正确
typedef int (*pFun)(int,int);
pFun myfun;
HINSTANCE hmod=LoadLibrary("TrainQuery.dll"); //debug 时值为0x10000000
myfun=(pFun)GetProcAddress(hmod,"myplus"); //myfun 为null
if(myfun)
{
UpdateData(true);
m_c=myfun(m_a,m_b);
UpdateData(false);
FreeLibrary(hmod);
}





void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
typedef int (*pFun)(int,int);
pFun myfun;
HINSTANCE hmod=::LoadLibrary("TrainQuery.dll");
myfun=(pFun)::GetProcAddress(hmod,"_myplus@8");
if(myfun)
{
UpdateData(true);
m_c=myfun(m_a,m_b);
UpdateData(false);
FreeLibrary(hmod);
}
}

// 我用DEPENDS 看了才知道原来编译器改了我的函数名
...全文
34 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
partime 2002-03-30
  • 打赏
  • 举报
回复
你自己没有申明输出的函数为_stdcall或pascal或WINAPI
所以编译器当然就按照cdecl方式处理函数名了
peeaby 2002-03-30
  • 打赏
  • 举报
回复
你用的是C++的编译器,C++编译器为了考虑重载的问题,会将函数名改变,如果不想这样的话,那么用.DEF文件,再在函数前加extern "C"标志就可以了。这样是告诉编译器是用C的规则来产生函数名。

不要什么都怪编译器,自己不明白就不要瞎嚷嚷,多看多学习才是。
bluecrest 2002-03-30
  • 打赏
  • 举报
回复
我在编译环境里设置的 c/c++ code genaration
_stdcall
bluecrest 2002-03-29
  • 打赏
  • 举报
回复
就这个问题我在论坛上喊了好几遍没人回答还浪费了不少分数

不爽

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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