[問題] dll :implicit link 和 explicit link
之前有發文問過 目前觀念是使用dll有兩種方法 implicit link 和 explicit link
explicit link似乎就是用loadlibrary / GetProcAddress方式 搭配.h
implicit link似乎就是 dll要搭配lib給 也要搭配.h
我和一個朋友詢問 他不是很清楚原理 但是他跟我講他給別人用都只給dll和.h
讓我覺得很難理解 因為他.h裡面有class 用explicit link似乎不可行....
我就去驗證一下
export出來的.h
內容:
class TESTDLL_API CTestDLL {
public:
// TODO: add your methods here.
virtual void XD()=0; //不定義給兒子override
virtual void ORZ(); //我在cpp定義
};
另一個.h內容
class Son:CTestDLL
{
public:
void XD(){cout<<"我是derived"<<endl;}
}
cpp定義
void CTestDLL::ORZ(){cout<<"我是orz"<<endl;}
順便export一個function 用來產生instance
TESTDLL_API void CreateInstance(CTestDLL **ptr)
{
*ptr = new Son;
}
再來是 要使用dll的程式 只加入dll和.h
HMODULE hGAL;
if (NULL != (hGAL =LoadLibrary(L".\\TestDLL.dll")))
{
cout<<"load dll successful"<<endl;
typedef void(*FUNPTR)(CTestDLL**);
FUNPTR FPTR;
FPTR=(FUNPTR)GetProcAddress(hGAL, "CreateInstance");
CTestDLL *ptr;
FPTR(&ptr);
//以下兩個呼叫 都可以成功印出.......
ptr->XD();
ptr->ORZ();
}
以上讓我對為啥要給.lib用implicit link 感到很怪 不知為啥要給lib
然後我就試著把virtual void ORZ(); //我在cpp定義的virtual拿掉 void ORZ();
ptr->ORZ();只要一呼叫就出現link error
對於link error和不link error這原因我沒有觀念...
變成目前結論是你export給別人如果class都是virtual就不用給lib
如果有非virtual就要lib...
如果不用GetProcAddress 來取得CreateInstance 直接呼叫 沒有lib也會link error
可是以上這兩個觀察到的現象
可否給我一個很好理解的觀念....
我實在不懂為什麼有時要lib有時不用給
感謝!@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
推
02/09 21:14, , 1F
02/09 21:14, 1F
→
02/09 21:15, , 2F
02/09 21:15, 2F
→
02/09 21:15, , 3F
02/09 21:15, 3F
→
02/09 21:16, , 4F
02/09 21:16, 4F
→
02/09 21:16, , 5F
02/09 21:16, 5F
→
02/09 21:16, , 6F
02/09 21:16, 6F
→
02/09 21:17, , 7F
02/09 21:17, 7F
→
02/09 21:18, , 8F
02/09 21:18, 8F
→
02/09 21:18, , 9F
02/09 21:18, 9F
推
02/09 21:21, , 10F
02/09 21:21, 10F
→
02/09 21:23, , 11F
02/09 21:23, 11F
推
02/09 21:34, , 12F
02/09 21:34, 12F
→
02/09 21:34, , 13F
02/09 21:34, 13F
→
02/09 21:35, , 14F
02/09 21:35, 14F
→
02/09 21:36, , 15F
02/09 21:36, 15F
→
02/09 22:49, , 16F
02/09 22:49, 16F
→
02/09 22:50, , 17F
02/09 22:50, 17F
→
02/09 22:50, , 18F
02/09 22:50, 18F
推
02/10 13:23, , 19F
02/10 13:23, 19F
→
02/10 13:24, , 20F
02/10 13:24, 20F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章