+ -
当前位置:首页 → 问答吧 → 调用DLL函数出现顺序问题

调用DLL函数出现顺序问题

时间:2011-12-05

来源:互联网

创建了个动态链接DLL,在调用由DLL提供的函数的时候,调用的顺序出现问题。比如,如下调用,show1();show2();第一个函数会正常调用,第二个函数则会在程序运行结束的最后一刻调用。

DllTest代码如下:
#include <iostream.h>
#include <windows.h>

 _declspec(dllexport) void show1()
{
cout<<"This is show1!"<<endl;
}

_declspec(dllexport) void show2()
{
cout<<"This is show2!";
}

DllTest包含个DllTest.def文件如下:
LIBRARY DllTest
EXPORTS
show1 @1
show2 @2

调用的程序为WIN32控制台应用程序:
#include <iostream.h>
#include <windows.h>

void main()
{
HINSTANCE hinst;
hinst=LoadLibrary("DllTest");
typedef void (*Show1)();
typedef void (*Show2)();
Show1 show1=(Show1)GetProcAddress(hinst,"show1");
Show2 show2=(Show2)GetProcAddress(hinst,"show2");
show1();
cout<<"behind show1()"<<endl;
show2();
cout<<"behind show2()"<<endl;
}

调用结果为:This is show1!
  behind show1()
  behind show2()
  This is show2!

作者: gangjian68   发布时间: 2011-12-05

不可能出现的结果
你自己仔细看看
跟踪设置断点看看是否已经执行

作者: sky101010ws   发布时间: 2011-12-05

引用 1 楼 sky101010ws 的回复:

不可能出现的结果
你自己仔细看看
跟踪设置断点看看是否已经执行

断点经过show2();但是没有显示,是个很奇怪的问题。

作者: gangjian68   发布时间: 2011-12-05

console有输出缓冲的,你没回车(endl或者"\n")那么屏幕可能不会刷新,加个endl就ok了

作者: Kevin_qing   发布时间: 2011-12-06