[from] http://blog.youkuaiyun.com/andy8205/article/details/3859965
1. VC++6.0中建立一个工作区workspace
2. 添加要调试的DLL工程
3. 建立一个可执行程序的工程,这个可执行程序包含了调用DLL的输出函数
4. 设置可执行程序的工程的编译Debug输出目录到DLL编译输出目录(即.exe的目录和.DLL目录一样)
5. 在project中设置active的工程为exe程序工程,编译此工程,得到exe文件
6. 在project中设置active的工程为DLL工程,编译此工程,得到DLL文件
7. 在exe源代码中,调用dll函数的地方ctrl+f10。进入调式模式,或者在DLL的源文件中设置断点,然后直接运行。
typedef void (__stdcall *TServiceMain)( int argc, wchar_t* argv[] ); // __stdcall 调用的压栈方式,函数指针为TServiceMain
//int argc 参数个数, wchar_t* argv[]指向参数数组的指针
int main(int argc, char* argv[])
{
HINSTANCE hDll;
//lpAddFun addFun;
hDll = LoadLibrary("E:\\cjy_VC_Projects\\source 阅读-注释\\flybird\\服务端\\winfex(dll程序)\\Debug\\winfex.dll");
/* GetProcAddress取DLL里面函数,有两种方式,函数名与序号.
查看DLL里有哪些函数的工具很多.可以从网上下载, 或者就用VC自带的DUMPBIN.EXE,或者DELPHI,BCB的TDUMP.EXE, 两个都是命令行工具,使用很简单
dumpbin xxxx.dll 或 tdump xxxx.dll
[dependency工具] input引用函数,output导出函数和扩展导出函数 */
TServiceMain ServiceMain = (TServiceMain)GetProcAddress(hDll,"ServiceMain");
int a[2][2]={{1,1},{2,2}};
wchar_t inargv[3][256] = {L"dest",L"src",NULL};
ServiceMain(2,(wchar_t**)inargv);
return 0;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)// 伪入口,不实现功能
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("\n process attach succeed!");
break;
}
return TRUE;
}
{
char svcname[256];