我總是想知道__declspec(dllimport)
的真實用例是什麼。我知道構建共享庫需要使用__declspec(dllexport)
導出其符號,然後庫的用戶使用這些符號作爲__declspec(dllimport)
。VisualStudio中的dllimport使用案例
然後,你應該建立一個特殊的定義,使dllexport
共享庫,如果沒有設置標誌,符號被定義爲dllimport
。
但是,我從來沒有使用dllimport
,它只是工作。
我有兩個項目:
ImportExport
設有一個小的Util類,這是建立與出口定義
Util.h:
#ifndef _UTIL_H_
#define _UTIL_H_
#if defined(EXPORTING)
# define EXPORT __declspec(dllexport)
#else
# define EXPORT // I should use __declspec(dllimport) but client will try out
#endif
class EXPORT Util {
public:
static void test();
};
#endif // !_UTIL_H_
源
然後文件Util.cpp:
#include <iostream>
#include "Util.h"
void Util::test()
{
std::cout << "Testing..." << std::endl;
}
沒什麼太複雜的,正如你所看到的,當用戶使用這個文件時,EXPORT根本就不會被定義(它應該被定義爲dllimport)。
客戶端EXE
Main.cpp的:
#include <Util.h>
int main(void)
{
Util::test();
return 0;
}
鏈接ImportExport.lib沒有任何限定設置,只是工作。沒有未定義的參考。
我想知道爲什麼是dllimport的用例?它是爲了向後兼容性而存在嗎?
注意:所有提交的代碼都是在VisualStudio 2012 Express上測試的。
示例:爲您的c#應用程序創建一個opencl包裝器2.0。 –
http://blogs.msdn.com/b/oldnewthing/archive/2006/07/27/680250.aspx,至少從「調用導入的函數,天真的方式」開始 –