[問題] dll函數可否提供多參數呢?

看板C_and_CPP (C/C++)作者 (小灰)時間13年前 (2012/07/20 11:57), 編輯推噓0(0023)
留言23則, 4人參與, 最新討論串1/1
問個笨問題~^^ dll檔的函數可否定義多參數呢?( 例如:funcName(int *fmt,...) ) dll檔的函數只能以__stdcall型態處理嗎?我嘗試將修飾字寫成__cdecl雖然編譯沒問題 但是在執行程式的地方部份,載入.dll後成功後在GetProcAddress時回傳null了~ 請大大們指教~感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.17.30

07/20 12:45, , 1F
__stdcall不支援可變參數 http://ppt.cc/uBv_
07/20 12:45, 1F

07/20 12:49, , 2F
__codel其實可以,但function name會被改掉
07/20 12:49, 2F

07/20 13:26, , 3F
使用 __codel 的小範例:http://ideone.com/xVCyl
07/20 13:26, 3F

07/20 13:29, , 4F
__declspec codeblock內建範例是用這個
07/20 13:29, 4F

07/20 13:30, , 5F
可以多參數沒問題
07/20 13:30, 5F

07/20 13:38, , 6F
我在GetProcAddress第二個參數的函式名稱加了"_"就可以
07/20 13:38, 6F

07/20 13:39, , 7F
怎麼加的?
07/20 13:39, 7F

07/20 13:39, , 8F
實現了,GetProcAddress(h,"_TestValue1");感覺有點偷吃
07/20 13:39, 8F

07/20 13:40, , 9F
真奇怪,我貼的那個 add 改成 _add 也不理我...
07/20 13:40, 9F

07/20 13:41, , 10F
步,有沒有別的處理方式呢?
07/20 13:41, 10F

07/20 13:43, , 11F
不理你呀@.@?需要貼整段CODE給你參考嗎?
07/20 13:43, 11F

07/20 14:01, , 12F
james是用C++編譯器嗎? 有用 extern "C"?
07/20 14:01, 12F

07/20 14:02, , 13F
....那code看起來就像是 C++ 的 name mangling XDrz
07/20 14:02, 13F

07/20 14:13, , 14F
用depends看一下.dll的函數名稱比較不會錯~~^^
07/20 14:13, 14F

07/20 14:49, , 15F
好奇怪,加上了 extern "C" 以後就變成 add 了
07/20 14:49, 15F

07/20 14:49, , 16F
疑惑的是連底線都不用加...?
07/20 14:49, 16F

07/20 15:05, , 17F
extern "C"會去除函數修飾字@_@
07/20 15:05, 17F

07/20 15:07, , 18F
我是用BCB所以要加,但是修飾字改用__stdcall時卻多了@
07/20 15:07, 18F

07/20 15:09, , 19F
可是查一下資料BCB使用__stdcall是不會加上"@"的..Orz
07/20 15:09, 19F

07/20 16:31, , 20F
我發現是因為我的函數是屬於多參數的,所以就算加了
07/20 16:31, 20F

07/20 16:31, , 21F
__stdcall在編譯時,還是會加前置底線~~
07/20 16:31, 21F

07/20 17:32, , 22F
extern "C" 就是只把函數名加底線啊
07/20 17:32, 22F

07/20 17:33, , 23F
所以用的時候, 用 add(), 他也是幫你改成呼叫 "_add"
07/20 17:33, 23F
文章代碼(AID): #1G2DSbSy (C_and_CPP)
文章代碼(AID): #1G2DSbSy (C_and_CPP)