2009-11-20 6 views
1

J'ai un fichier .dll et le fichier .lib pour cela. La DLL communique avec un lecteur de clé électronique et vous permet de lire/écrire l'ID de clé.Comment utiliser un DLL?

Ceci est la seule documentation fournie avec:

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) 

Je ne l'ai jamais utilisé DLL avant et ne sais vraiment pas comment je suis censé l'utiliser dans un programme C. Je ne sais vraiment pas quoi faire ce passé:

#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; 
} 

Si quelqu'un pouvait me montrer un exemple comment comment obtenir DevicePresent et comment utiliser WriteKeyId je serais très reconnaissant!

+0

Quel framework/IDE/compilateur utilisez-vous? – Pretzel

Répondre

4

Cette documentation suggère que la DLL est un OCX, destiné à être utilisé avec Visual Basic.

Essayez regsvr32 dessus. Si cela vous convient, vous pouvez ensuite créer l'API COM nécessaire pour le studio visuel.

Il sera très difficile d'organiser des appels directs vers ce genre de choses à partir de C, mais vous pouvez essayer de le regarder avec dumpbin et voir ce qu'il exporte.

Selon le commentaire, l'ajout d'un #import pour la DLL à votre programme C est le moyen le plus rapide.

+0

Si la DLL est un OCX destiné à être utilisé par Visual Basic, essayez de l'importer aveC# Import. Recherchez ensuite dans le dossier intermédiaire les fichiers d'en-tête générés automatiquement qui devraient fournir plus d'informations. Et des questions éventuellement en fonction de la compréhension de COM. –

0

Voir GetProcAddress(). Assurez-vous que le symbole est exporté avec dumpbin /exports Foo.dll

E.g.

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

caveat Vous devez connaître le type de données exactes cet objet est au niveau binaire! Il existe probablement une référence quelque part comparant VB < -> Types de données SDK Platform.

+0

Attention à élaborer? En l'état, ce n'est pas très utile. –

+0

Ceci n'est pas susceptible d'aider. Dans une DLL COM, la fonction que vous souhaitez appeler n'est généralement pas exportée. Il existe un léger espoir que la présence d'un fichier .lib suggère que certaines choses utiles sont exportées, mais elles peuvent ne pas correspondre à l'API documentée. – bmargulies

0

C'est une DLL COM. Ce qui le rend pratiquement impossible à utiliser en C.

+0

Pas vraiment vrai. Générez un ensemble d'en-têtes et vous pouvez appeler com à partir de C. MS le prend en charge. – bmargulies