2010-11-29 118 views
0

這是我的場景:什麼是將數據傳輸到DLL的好方法?

我已經在C++(使用VS2008)中提供了一個規則的DLL,它提供了C接口來導出函數。的有關職能有兩個是1.初始化()和2未初始化()

初始化()我不得不採取從客戶端應用程序的一些參數。到目前爲止,我認爲以下兩種方式來做到這一點的:

第一種方式:

我做一個結構,填充和結構對象的對象/指針傳遞從客戶端應用程序的DLL。

struct SData 
    { 
     DataType param1; 
     DataType param2; 
     DataType param3; 
     DataType param4; 
    }; 

方式二:

我出口4層的功能從我的DLL像

SetParam1(DataType param1) 
    SetParam2(DataType param2) 
    SetParam3(DataType param3) 
    SetParam4(DataType param4) 

哪種方式或其他一些我應該使用,請建議。

回答

2

由於DLL共享與應用程序的地址空間,你可以通過發送指向你的結構處理這一切。如果您碰巧在您的應用程序中使用了不同版本的DLL,那麼您可能還會在您的函數中使用某種版本檢查,以避免因不同版本的混淆。

我個人不建議SetParam(param1)方法,因爲它在DLL意味着全球範圍內因而不是線程安全的。另一方面,將所有參數傳遞給函數本身具有局部範圍,不易出錯,更容易理解。

例如,在使用SetParam方法的實際功能之前,您不知道需要調用多少個函數。但是,在函數中傳遞參數允許您通過查看函數聲明或結構成員來評估是否提供足夠的參數。在需要調用各個方法來設置參數的情況下,您必須有文檔。

同樣,你可以把每一個結構成員在你的函數單獨的​​參數,但太多的參數變得難以在一個函數調用保持一定的數量之後。在這種情況下使用指向結構的指針會更好。

想想自己是誰的人從公司購買的DLL。你會如何選擇DLL?哪種方式更容易,更直接地編寫代碼?

+0

有沒有第三條道路? – 2010-11-29 09:49:30

相關問題