討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
請問一個DLL的問題
更改我的閱讀文章字型大小
作者 : ccd0813(ccd) 人氣指數超過10000點
[ 貼文 45 | 人氣 11111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/12 下午 02:00:02
我最近拿到一個DLL檔
可是我把他的檔頭跟檔案弄進去專案之後
卻出現下面的訊息
capture1.cpp
d:\ccd-work\capture1\capture1.cpp(167) : warning C4101: 'hWnd1' : unreferenced local variable
Linking...
capture1.obj : error LNK2001: unresolved external symbol _capGetImageBuffer
capture___Win32_Debug/capture.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
capture.dll - 2 error(s), 1 warning(s)

出現這些訊息 我不知道這是怎樣
是我沒設定好嗎 請各位前輩指教

作者 : akira32(Akira) VC++優秀好手DirectX優秀好手貼文超過2000則人氣指數超過350000點
[ 貼文 2527 | 人氣 384134 | 評價 3430 | 評價/貼文 1.36 | 送出評價 243 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/12 下午 06:13:06
DLL的.h可能沒放入lib
作者 : ccd0813(ccd) 人氣指數超過10000點
[ 貼文 45 | 人氣 11111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/12 下午 07:17:22
我已經把.H檔放進去囉
而且我也把DLL檔跟執行檔放在同一個目錄夾裡
還是會產生相同的錯誤情況
麻煩各位大大幫小弟我指點迷津囉 感恩....
作者 : maxeii(生魚片)
[ 貼文 37 | 人氣 1169 | 評價 50 | 評價/貼文 1.35 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/16 下午 05:39:44

>我已經把.H檔放進去囉
>而且我也把DLL檔跟執行檔放在同一個目錄夾裡
>還是會產生相同的錯誤情況
>麻煩各位大大幫小弟我指點迷津囉 感恩....
除了這樣以外..在linker也要放他的lib.那個linker error 2001應該就是這引起的
作者 : kennytsai(Kenny) C++卓越專家貼文超過500則
[ 貼文 720 | 人氣 2903 | 評價 2840 | 評價/貼文 3.94 | 送出評價 140 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人ccd0813註記此篇回應為最佳解答 2004/4/19 上午 11:08:05
如果你的程式(xxx.c) include該Header file(yyy.h)後,你直接呼叫yyy.h內宣告的某個函式,這樣的作法除了需要yyy.dll外,你還需要yyy.lib,這個lib是製作該DLL時產生的。
如果你只有DLL時,你需要用下列的方法來呼叫:
LoadLibrary() or GetModuleHandle()
GetProcAddress()
...
詳細的說明請自行參考MSDN。
Good Luck!
作者 : ccd0813(ccd) 人氣指數超過10000點
[ 貼文 45 | 人氣 11111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/1 下午 10:19:46
恩 的確是少了一個LIB檔案
把他加進來就OK
感謝前輩們的指導........
作者 : ghost_liao(ghost) 貼文超過200則人氣指數超過10000點
[ 貼文 367 | 人氣 13998 | 評價 1230 | 評價/貼文 3.35 | 送出評價 94 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人ccd0813註記此篇回應為最佳解答 2004/7/8 下午 11:39:15
可能還要把dll的h檔加入app的專案中
作者 : gydkbabeq(gydkbabeq)
[ 貼文 27 | 人氣 2801 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/5 上午 12:11:30
我也有相同的問題
但我卻沒辦法解決
可否請教原作者...如何操作
感恩!!!
作者 : sunny_gong(simula)討論區板主 C++頂尖高手貼文超過500則人氣指數超過30000點
[ 貼文 892 | 人氣 45047 | 評價 7220 | 評價/貼文 8.09 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/5 上午 03:27:59
可以試看看使用 dumpbin.exe 與 lib.exe 從 dll 產生 .lib 的方法:
http://www.bytegeiz.de/article_2.php

文章裡面的:

LIBRARY USER32.dll
EXPORTS
  MessageBoxA@16 @452 NONAME

MessageBoxA@16 的 @16 可以不要,它好像是參數總長度的意思。寫成下面這樣就可以了:

LIBRARY USER32.dll
EXPORTS
  MessageBoxA @452
作者 : gydkbabeq(gydkbabeq)
[ 貼文 27 | 人氣 2801 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/5 上午 10:31:22
我打不開dumplib.exe 和lib.exe的檔案
還是我操作有問題!!!
可不可以請simaul教我操作步驟ㄚ!!!
感激不盡!!!謝謝

還有 我的dll和lib 還有.h檔都是別人提供的
其中 GSC.dll
     GSC.lib
     GSC_DEF.h

我這樣include

extern "C" {

#include "GSC_DEF.h"
}
 
project->setting->link->libary modual 為GSC.lib

這樣有錯ㄇ

標頭檔的檔名 要跟lib,dll的檔名一樣ㄇ??
作者 : gydkbabeq(gydkbabeq)
[ 貼文 27 | 人氣 2801 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/5 上午 10:39:48
我的error
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
smart_card.cpp
smart_cardDlg.cpp
Generating Code...
Linking...
smart_cardDlg.obj : error LNK2001: unresolved external symbol _GCSInit
Debug/smart_card.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
作者 : sunny_gong(simula)討論區板主 C++頂尖高手貼文超過500則人氣指數超過30000點
[ 貼文 892 | 人氣 45047 | 評價 7220 | 評價/貼文 8.09 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/5 下午 07:39:33
dumpbin.exe 與 lib.exe 在 VC++ 目錄裡面的某個 bin 子目錄裡,請找找看,將該子目錄的路徑加到 path 裡面。既然已經有 .h 與 .lib 了,按照一般編譯程序來做就可以了。不必用 extern "C"。可以使用 #pragma comment(lib, "GSC.lib") 試看看。
作者 : gydkbabeq(gydkbabeq)
[ 貼文 27 | 人氣 2801 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/6 上午 10:53:49
還是不行耶~
我的error 是unresolved external symbol _GCSInit
那我有看過我的.lib檔 他是 _GCSInit@4
我聽別人說 有可能是這個lib檔是給borland c++用的
而link不能過 就在於namespace上的問題

是不是真的是這樣ㄚ~?!小弟也不是很董
以上有觀念錯誤的..請大大不吝指導

作者 : sunny_gong(simula)討論區板主 C++頂尖高手貼文超過500則人氣指數超過30000點
[ 貼文 892 | 人氣 45047 | 評價 7220 | 評價/貼文 8.09 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/6 上午 11:40:04
那就用 dumpbin.exe 與 lib.exe 試看看吧。那個程序很簡單:
(1) 用 dumpbin.exe 產生一個輸出函式的文字檔。
(2) 以該文字檔的內容,編輯一個 .def 檔案。
(3) 用 lib.exe 與 .def 檔產生一個 .lib。
指令格式就如該網頁所寫的:
(1) dumpbin /exports c:\winnt\system32\user32.dll > c:\exports.txt
(2) 使用 exports.txt 的內容,編輯一個 user.def。
(3) lib.exe /machine:ix86 /def:user32.def /out:user32.lib
當然那個 user32 要改成自己的檔案名稱。
作者 : archimage(archimage)
[ 貼文 85 | 人氣 5 | 評價 1280 | 評價/貼文 15.06 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/6 下午 12:18:08

>smart_cardDlg.obj : error LNK2001: unresolved external symbol _GCSInit
>Debug/smart_card.exe : fatal error LNK1120: 1 unresolved externals
>Error executing link.exe.

常常看到討論區有人詢問這類的問題。不知道大家有問問題前是否有先使用搜尋工具
先看看是否有類似的答案。
由你的問題來看,假設你只有拿到DLL及.h的檔案(沒有.lib),你的解決方式應該就是使用
dynamic-link(使用LoadLibrary及GetProcAddress),或是自已產生.lib(使用lib工具
應該就可以使用<不能使用的話,看一下你的環境變數是否有設定。一般來說,安裝VC後
就會有這些工具了>)
不過你問題應該是使用static linking(因為也有.lib吧!)...而且由你的連結不到的訊息
來看是需要使用extern "C" (標準c函式是前面加底線的編碼方式,而c++的話就不一定
囉..)。你的步驟似乎都沒有錯,不過該不會只是路徑的問題吧?你在
project->setting->link->libary modual 為GSC.lib
有設定GSC.lib..但你確定gsc.lib是在預設的路徑內嗎?試著將gsc.h/gsc.dll/gsc.lib先
放在你的project目錄內試試。

若還是不行無法連結,這時你就要去注意一點了,因為borland的library檔案格式是使用
OMF format..而VC跟GNU C一樣是使用COFF format,所以你就一定要使用lib這個工
具將OMF format的library file轉換成COFF format啦。simula大大有完整的解釋說明^^
有什麼地方不正確或是需要補充的,希望各位大大可以指正..謝謝^^

ps. 使用#pragma comment(lib, "GSC.lib") ,其中gsc.lib不需要寫副檔名。所以改成
#pragma comment(lib, "GSC")看看囉。

作者 : rickyt(陽光) 人氣指數超過10000點
[ 貼文 58 | 人氣 14785 | 評價 20 | 評價/貼文 0.34 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/6 下午 02:47:09
看過各位前輩的討論..
前輩們說的我都照做了..但是仍然是出現如下的錯誤ㄋㄟ..
test01Dlg.obj : error LNK2001: unresolved external symbol _OpenHid@4
Debug/test01.exe : fatal error LNK1120: 1 unresolved externals
我一樣沒辦法引用dll內的函數..

廠商給我HIDKey.lib HIDKey.dll HIDKery.h 三個檔.. ".h"檔我include進我的.cpp了.. ".lib"我也加到link裡面去了.. 三個檔我都放在專案目錄下.. 也放到windows裡的system目錄..但是仍然出現錯誤.. ><""

請問我該怎麼去確定廠商提供的dll跟lib檔是可以在VC++裡面使用的呢??麻煩各位前輩指導一下..
作者 : sunny_gong(simula)討論區板主 C++頂尖高手貼文超過500則人氣指數超過30000點
[ 貼文 892 | 人氣 45047 | 評價 7220 | 評價/貼文 8.09 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/6 下午 04:08:05
剛剛弄清楚了,如果是 _stdcall,函式名稱後面要加 @n,那個 n 是參數總長度。所以,該 DLL 裡面的函式原型如果是:

extern "C" __declspec(dllexport) void _stdcall test1(int i);

dumpbin.exe 的 export 輸出會是:

    ordinal hint RVA name
     1 0 00001010 _test1@4

.def 檔要這麼寫,注意前面的底線不要:

LIBRARY testdll
EXPORTS
  test1@4 @1


應用程式在引用時要宣告成:

extern "C" __declspec(dllimport) void _stdcall test1(int);
作者 : gydkbabeq(gydkbabeq)
[ 貼文 27 | 人氣 2801 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/8/8 上午 11:14:59
感謝各位前輩指導....
我會在試試看的......
 板主 : 青衫 , Raymond
 > Visual C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++
1 青衫 11070 
2 Raymond 10090 
3 Clier 7630 
4 小約翰 2500 
5 Cog 2030 
6 coco 1870 
7 aming 1410 
8 牧童哥 1400 
9 r2109 1380 
10 Akira 1350 
Visual C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.2197266