如何使用DLL?

时间:2009-11-20 01:01:49

标签: c winapi dll

我有一个.dll文件和.lib文件。

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,我会非常感激!

3 个答案:

答案 0 :(得分:4)

该文档表明该DLL是一个OCX,旨在与Visual Basic一起使用。

尝试使用regsvr32。如果喜欢它,您可以从visual studio为它构建必要的COM API。

从C安排直接调用此类事件将非常困难,但您可以尝试使用dumpbin查看它并查看它导出的内容。

根据评论,将DLL的#import添加到C程序是最快的方法。

答案 1 :(得分:0)

GetProcAddress()。确保使用dumpbin /exports Foo.dll

导出符号

E.g。

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

警告您必须知道此对象在二进制级别的确切数据类型!可能存在比较VB&lt; - &gt;的参考。 Platform SDK数据类型。

答案 2 :(得分:0)

这是一个COM DLL。这使得在直接使用C时几乎不可能。