请看:
我的exe文件,文件名dllexe:
extern "C" _declspec(dllexport) int add(int a,int b)
{
return a+b;
}
int main()
{
printf("a+b=%d\n",add(2,6));
getchar();
return 0;
}然后另外一个程序加载:
int main()
{
typedef int (*FUN)(int,int);
FUN fun;
HMODULE hmod=LoadLibrary("dllexe.exe");
if(NULL==hmod)
{
printf("error load\n");
return -1;
}
fun=(FUN)GetProcAddress(hmod,"add");
if(NULL==fun)
{
printf("error GetProcAddress\n");
return -1;
}
int sum=(*fun)(18,22);
printf("sum=%d\n",sum);
FreeLibrary(hmod);
getchar();
return 0;
}请问:当我的dllexe文件的动态库运行时,加载程序是如何加载它的?(因为它们是两个进程)
我的exe文件,文件名dllexe:
extern "C" _declspec(dllexport) int add(int a,int b)
{
return a+b;
}
int main()
{
printf("a+b=%d\n",add(2,6));
getchar();
return 0;
}然后另外一个程序加载:
int main()
{
typedef int (*FUN)(int,int);
FUN fun;
HMODULE hmod=LoadLibrary("dllexe.exe");
if(NULL==hmod)
{
printf("error load\n");
return -1;
}
fun=(FUN)GetProcAddress(hmod,"add");
if(NULL==fun)
{
printf("error GetProcAddress\n");
return -1;
}
int sum=(*fun)(18,22);
printf("sum=%d\n",sum);
FreeLibrary(hmod);
getchar();
return 0;
}请问:当我的dllexe文件的动态库运行时,加载程序是如何加载它的?(因为它们是两个进程)
如果加载的是dll,则可以运行dll的入口点,如果加载的是exe,则仅仅是建立文件映射,不执行代码
但是可以读取exe的资源,比如exe里面有个对话框资源就可以把它用于DialogBoxParam
加载的dll可能会创建进程,但这不关LoadLibrary的事
“进程外的组件”是com的重要部分,它是通过相关com相关服务实现的。
所以它们是两个不同层次上的概念,如果非要说有什么关系的话,那只能说,"进程外的组件"运行的时候会需要用调用LoadLibrary这个系统函数。PS:请回答 雷锋跟雷锋塔是什么关系?