#include <Windows.h>
#include <stdio.h>
main()
{typedef VOID (*MYPROC)();
MYPROC ProcAdd; HINSTANCE in=LoadLibrary("link.dll");
ProcAdd= (MYPROC)GetProcAddress(in,"c");
if (NULL != ProcAdd) {printf("d");
}
else
{
ProcAdd();
}
}
DLL:
#include <stdio.h>
extern
__declspec (dllexport) c(){printf("ok in dllexport");}
#include <stdio.h>
main()
{typedef VOID (*MYPROC)();
MYPROC ProcAdd; HINSTANCE in=LoadLibrary("link.dll");
ProcAdd= (MYPROC)GetProcAddress(in,"c");
if (NULL != ProcAdd) {printf("d");
}
else
{
ProcAdd();
}
}
DLL:
#include <stdio.h>
extern
__declspec (dllexport) c(){printf("ok in dllexport");}
解决方案 »
- CStatic不能显示图片???
- 为什么我的程序nod32总说是木马变种
- 请高手将如下BUTTON事件中的VC代码翻译成VB谢谢了
- 在哪里能找到系统提供的AcitveX控件的使用说明?
- 初学vc++,立此帖以明志.每日必顶,天天进步!
- 散分!
- help!!我开发的程序在别人机器上运行时有如下错误:*.exe产生错误,会被Windows关闭。您需要重新启动程序,正在创建错误日志。
- 请问有谁知道vc程序在脱离vc编译环境是需要哪些库才能运行?请告知!
- .cpp文件里可以用.h里的各个函数吗?包括private protected的?
- 求vc++界面高手协助做一个界面,有报酬。
- 一个基础性的问题。
- 程序中加汇编代码的问题???
说出
原因来看谁高笑
别溜了
就你 cMymfc
如果函数指针procAdd为空,则通过这个指针去调用函数
你这不是搞笑骂
#include <stdio.h>
main()
{typedef VOID (WINAPI*MYPROC)();
MYPROC ProcAdd=NULL; HINSTANCE in2=LoadLibrary("link.dll");
ProcAdd= (MYPROC)GetProcAddress(in2,"c");if (NULL != ProcAdd) { ProcAdd();
}
else
{
printf("d");
}
}
算你很
现在问题是为什么ProcAdd为NULL为啥取不到值高手对此都束手无策了,所以不要往简单了想
.
.
.
typedef void (*MYPROC)();
.
.
.
或是用#pragma comment(linker,"")开关来保持原名.
现在很少人在研究DLL进程间通讯之类的东西了, 好象
满大街都是脚本.
有dll有啥关系吗?
最好用.DEF导出函数,保持导出函数名字不变。
extern "C" 修饰
1) 导出的函数前用extern "C" ,强制按C风格导出
2) 生成.def文件.加到工程里: 在这个文件里定义导出函数:EXPORTS:
C @1 PRIVATE方法1对 stdcall 风格的函数无效
能讲具体点吗另外 extern "c"当然是用了,否则还叫什么dll
直接加上这句就可以了吗你用DEPENDS打开DLL看看
depend是啥,在那?
生成.def文件很简单, New File, 选择源文件(c/c++),然后起名的时候指定.def后缀就行了
ProcAdd=(MYPROC)GetProcAddress(in,"c");单步查看一下in的值,
in的值%99已经为0x10000000.
LoadLibrary("link.dll");没把DLL文件Load进来,GetProcAddress自然取不到函数指针啦