2009-11-20 66 views
1

我有一個.dll文件和它的.lib文件。如何使用dll?

該DLL與電子密鑰閱讀器通信,並允許您讀取/寫入密鑰ID。

這是自帶的唯一文檔:

DLL Usage: 
boolean = object.DevicePresent (PROPERTY: true if the device is present) 
boolean = object.KeyPresent (PROPERTY: true if a key is in the device) 
long = object.KeyId (PROPERTY: gets the keys id) 
object.WriteKeyId KeyId (METHOD: Writes new id to the key) 
Private Sub object_KeyRemoved (EVENT: Key removed) 

我從來沒有使用DLL前,真的不知道我應該如何在C程序中使用它。我真的不知道該怎麼做過去,這:

#include <stdlib.h> 
#include <windows.h> 

typedef int (__cdecl *MYPROC)(LPWSTR); 
int main(int argc, char *argv[]) 
{ 
HINSTANCE hinstLib; 
hinstLib = LoadLibrary(TEXT("ekey.dll")); 
if (hinstLib != NULL) 
{ 
    //now what? how do i get the properties or call a method? 
} 
return 0; 
} 

如果有人能告訴我一個例子,如何如何得到DevicePresent以及如何使用WriteKeyId我會很感激!

+0

您使用的是什麼框架/ IDE /編譯器? – Pretzel 2009-11-20 02:03:14

回答

4

該文檔建議該DLL是一個OCX,旨在用於Visual Basic。

試試看regsvr32。如果喜歡它,你可以從visual studio爲它建立必要的COM API。

從C安排直接調用這類事情將非常困難,但您可以嘗試使用dumpbin查看它並查看它導出的內容。

根據評論,將DLL的#import添加到您的C程序是最快捷的方法。

+0

如果dll是一個供Visual Basic使用的OCX,那麼請嘗試使用#import導入它。然後查看中間文件夾中的自動生成的頭文件,這應該會產生更多的信息。並可能取決於對COM的理解。 – 2009-11-20 22:10:12

0

請參閱GetProcAddress()。確保符號與dumpbin /exports Foo.dll

E.g.

BOOL *pPresent = (BOOL *)GetProcAddress(hInstLib, _T("DevicePresent")); 
if (pPresent) { 
    printf("%d\n", *pPresent); 
} 

買者你必須知道確切的數據類型這個對象是在二進制級別!比較VB < - > Platform SDK數據類型可能有一個參考。

+0

謹慎闡述?按照現狀,這不是很有幫助。 – 2009-11-20 01:23:32

+0

這不太可能有幫助。在一個COM DLL中,你想調用的函數通常不會被導出。有一點希望,即.lib文件的存在暗示了一些有用的東西被導出,但它們可能不符合記錄的API。 – bmargulies 2009-11-20 02:05:30

0

這是一個COM DLL。這使得實際上不可能在直線C中使用。

+0

不是真的。生成一組標題,你可以從C中調用com。MS支持它。 – bmargulies 2009-11-20 02:06:00