subject_21777.htm

来自「一些关于vc的问答」· HTM 代码 · 共 42 行

HTM
42
字号
<p>
序号:21777 发表者:塞翁 发表日期:2002-11-20 12:56:22
<br>主题:VC如何调用DLL文件
<br>内容:我把一些常用的函数写在一个DLL文件中;<BR>在另一个程序中连接了这个DLL文件的LIB和头文件;然后调用其中的一个函数;<BR>但是在编译时却报该函数未申明;为什么?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:巴人 回复日期:2002-11-20 13:04:13
<br>内容:编译错,还是连接错?<BR>麻烦你提问要描述的清楚些!<BR>最好把出错的提示贴上。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Norton AntiVirus 回复日期:2002-11-20 13:04:56
<br>内容:把Dll的头文件也包含进来!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:塞翁 回复日期:2002-11-20 13:09:25
<br>内容:以下是出错信息:<BR>==============================================================<BR>Compiling...<BR>123Dlg.cpp<BR>D:\TalkAI_Work\Test\123\123Dlg.cpp(246) : error C2065: 'test_dll' : undeclared identifier<BR>Error executing cl.exe.<BR>===============================================================<BR>其中test_dll是我在dll文件中定义好的函数;DLL文件编译正常.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:塞翁 回复日期:2002-11-20 13:13:40
<br>内容:回凯凯:<BR>我已经在程序中包括了头文件;<BR>不过我看头文件中也没有函数定义;倒是在DEF文件中列出了函数名;<BR>头文件好像没什么内容.<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:塞翁 回复日期:2002-11-20 13:16:32
<br>内容:sorry;<BR>我记得那个图标以前叫凯凯;现在是green_pig了;<BR>刚才会贴没注意;sorry
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:徐景周 回复日期:2002-11-20 13:22:14
<br>内容://GetProcAddresses<BR>//Argument1: hLibrary - Handle for the Library Loaded<BR>//Argument2: lpszLibrary - Library to Load<BR>//Argument3: nCount - Number of functions to load<BR>//[Arguments Format]<BR>//Argument4: Function Address - Function address we want to store<BR>//Argument5: Function Name - Name of the function we want<BR>//[Repeat Format]<BR>//<BR>//Returns: FALSE if failure<BR>//Returns: TRUE if successful<BR>BOOL GetProcAddresses( HINSTANCE *hLibrary, <BR>LPCSTR lpszLibrary, INT nCount, ... )<BR>{<BR>va_list va;<BR>va_start( va, nCount );<BR><BR>if ( ( *hLibrary = LoadLibrary( lpszLibrary ) ) <BR>!= NULL )<BR>{<BR>FARPROC * lpfProcFunction = NULL;<BR>LPSTR lpszFuncName = NULL;<BR>INT nIdxCount = 0;<BR>while ( nIdxCount &lt; nCount )<BR>{<BR>lpfProcFunction = va_arg( va, FARPROC* );<BR>lpszFuncName = va_arg( va, LPSTR );<BR>if ( ( *lpfProcFunction = <BR>GetProcAddress( *hLibrary, <BR>lpszFuncName ) ) == NULL )<BR>{<BR>lpfProcFunction = NULL;<BR>return FALSE;<BR>}<BR>nIdxCount++;<BR>}<BR>}<BR>else<BR>{<BR>va_end( va );<BR>return FALSE;<BR>}<BR>va_end( va );<BR>return TRUE;<BR>}<BR><BR>So since we now have the main core to this article, lets now look at how to use this with a short sample that was compiled as a Windows console application.<BR><BR>#include <BR><BR>typedef int ( WINAPI *MESSAGEBOX ) <BR>( HWND , LPCSTR, LPCSTR, DWORD );<BR>typedef int ( WINAPI *MESSAGEBOXEX ) <BR>( HWND , LPCSTR, LPCSTR, DWORD , WORD );<BR><BR>void main(void)<BR>{<BR>MESSAGEBOX lpfMsgBox = NULL;<BR>MESSAGEBOXEX lpfMsgBoxEx = NULL;<BR>HINSTANCE hLib;<BR>if(GetProcAddresses( &amp;hLib, "User32.dll", 2,<BR>&amp;lpfMsgBox, "MessageBoxA",<BR>&amp;lpfMsgBoxEx, "MessageBoxExA" ) )<BR>{<BR>lpfMsgBox( 0, "Test1", "Test1", MB_OK );<BR>lpfMsgBoxEx( 0, "Test2", "Test2", MB_OK, <BR>MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ) );<BR>}<BR>if ( hLib != NULL )<BR>FreeLibrary( hLib );<BR>}<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?