如何用DLL封装一个DLL?(没有.lib,没有.h)
我一直都用隐式调用DLL,可这回没了LIB,就晕了。如何显式的调用呢?函数怎样封装呢?
我看了关于显式调用的MSDN的例子
如下:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer//这里是什么?函数的指针哪里来的呢?
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
如果我封装了这个DLL需要改动的函数,那其它不需改动函数能直接被我用户得到么
问题点数:100、回复次数:6Top
1 楼mythay(小黑)回复于 2006-03-15 14:04:19 得分 100
LPFNDLLFUNC1 是用typedef自定义的指针类型,函数具有UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);这样的原型。
如果这个函数的原型不变,当然不需改动就可以被用户得到。
---------
其实根据dll可以生成相应的lib文件。
1.使用dumpbin导出dll的def文件,推荐使用pexports,可以直接导出不需要修改的def文件.
2.使用vc自带的lib程序,调用LIB /DEF:sample.def /MACHINE:IX86即可生成lib文件。
.h文件虽然没有,但是你知道这个函数的原型,自己写一个就成。Top
2 楼he_sl(he_sl)回复于 2006-03-15 14:13:00 得分 0
markTop
3 楼wawaku(一堆裤衩!)回复于 2006-03-15 14:17:08 得分 0
dumpbin命令怎么用?我C:\windows\system32>下使用时命令不起作用呢,请教一下了。Top
4 楼wawaku(一堆裤衩!)回复于 2006-03-15 14:21:04 得分 0
另外,比如说我知道我的DLL里有
Eap_GetDataSize(String dataStoreName,ref ulong dsSize)
这样一个函数,我怎么定义我的函数指针呢,怎样调用这个函数呢?Top
5 楼wawaku(一堆裤衩!)回复于 2006-03-15 14:34:54 得分 0
TO:小黑
dumpbin学会使用了,却没有生成DEF文件呀,能不能说详细点怎么导出LIB文件呢?你一定会得很多分呀,谢谢!Top
6 楼mythay(小黑)回复于 2006-03-15 17:47:27 得分 0
使用/exports参数便可以看到到处的函数名,序号等信息。然后自己根据以上信息写一个def文件。Top




