改寫VC的程式碼 |
答題得分者是:rick060
|
Solaris2005
一般會員 ![]() ![]() 發表:7 回覆:13 積分:4 註冊:2003-05-19 發送簡訊給我 |
最近在使用CCD, 但是原廠只有提供VC的source code, 以及.H, .LIB, .DLL檔
可是, 我沒寫過VC, 所以想改寫成BCB 我有點照本宣科的將原本的source code寫到BCB時 在呼叫到某一行時, 原本的記憶體位置就突然變成???? 可是在VC上並不會, 是我在呼叫原本VC使用的LIB或是DLL的問題嗎? 我用coff2omf 也轉過了, 還是不行, 還有什麼原因, 是我可以努力的嗎? 程式碼: if (AdvDVP_CreateSDKInstence) { if (AdvDVP_CreateSDKInstence((void **)&pDVPSDK) != SUCCEEDED) return; } else return; int res = pDVPSDK->AdvDVP_InitSDK(); <<<到這裡時, pDVPSDK裡的所有function都還有記憶體位址 if (res == SUCCEEDED) { if (pDVPSDK->AdvDVP_GetNoOfDevices(&nDevCount) != SUCCEEDED) <<<< 這一行跑完之後, 所有的function address全部變成??? return; |
jcjroc
高階會員 ![]() ![]() ![]() ![]() 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
Solaris2005
一般會員 ![]() ![]() 發表:7 回覆:13 積分:4 註冊:2003-05-19 發送簡訊給我 |
|
don750421
一般會員 ![]() ![]() 發表:11 回覆:12 積分:4 註冊:2012-09-27 發送簡訊給我 |
|
rick060
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
這麼說吧。 VC 做的 dll 能不能給 bcb 用? 答案是"有限度的允許" 需滿足下條件 其一 從 vc export 出來的 function / variable 都有前綴 extern "C" ,代表抑制 name mangling (參考 http://en.wikipedia.org/wiki/Name_mangling) 解法? 有 使用 vc DUMPBIN (參考 http://msdn.microsoft.com/en-us/library/c1h23y6c.aspx) 或 http://www.dependencywalker.com/ 我記得版上有文是說明bcb與vc name mangling 之間的call convention 其二 資料型態只能使用 C Data types 的型別 解法? 有 1.把dll 裡的 function wrapper 成 COM 給 bcb 用 其三 若有使用到 pointer ,傳的是 struct(C),又要考慮到 align 問題(參考 http://en.wikipedia.org/wiki/Data_structure_alignment) 綜合以上,你可以參考你手上的 .h 看有無符合上述條件 若沒有,我是建議你從 vc 下手吧 ===================引 用 Solaris2005 文 章=================== 最近在使用CCD, 但是原廠只有提供VC的source code, 以及.H, .LIB, .DLL檔 可是, 我沒寫過VC, 所以想改寫成BCB 我有點照本宣科的將原本的source code寫到BCB時 在呼叫到某一行時, 原本的記憶體位置就突然變成???? 可是在VC上並不會, 是我在呼叫原本VC使用的LIB或是DLL的問題嗎? 我用coff2omf 也轉過了, 還是不行, 還有什麼原因, 是我可以努力的嗎? 程式碼: if (AdvDVP_CreateSDKInstence) { if (AdvDVP_CreateSDKInstence((void **)&pDVPSDK) != SUCCEEDED) return; } else return; int res = pDVPSDK->AdvDVP_InitSDK(); <<<到這裡時, pDVPSDK裡的所有function都還有記憶體位址 if (res == SUCCEEDED) { if (pDVPSDK->AdvDVP_GetNoOfDevices(&nDevCount) != SUCCEEDED) <<<< 這一行跑完之後, 所有的function address全部變成??? return; |
Solaris2005
一般會員 ![]() ![]() 發表:7 回覆:13 積分:4 註冊:2003-05-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |